私は以下のように投稿タイプを宣言しました:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'agences'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'taxonomies' => array('brands', 'country'),
'supports' => array('title', 'editor', 'author', 'thumbnail', 'custom-fields')
);
register_post_type('destinations', $args);
最初はsingle-agences.php
を使用してこの投稿タイプの単一ページにアクセスできましたが、現在は404にリダイレクトされています。
私は他の答えをチェックしました、そしてそれが一般的な間違いであることがわかりました、しかし他の答えはこれを解決することができませんでした。どんな助けでも素晴らしいでしょう。
それはプラグイン "Remove taxonomy base slug"によるものです。それはCPTの「目的地」の基本スラグと矛盾していました。スラッグをチェックして手動で適切な場所にリダイレクトするには、add_rewrite_rule
を使用しなければなりませんでした
register_post_type()
は書き換えルールをフラッシュしないので、新しく登録されたCPTは404を示します。手動でも自動でも、それはあなた次第です。
/wp-admin/
に行き、それからSettings"Permalinksに行き、そしてただヒットしてください。 Save Changes 書き換えルールをフラッシュするボタン。
flush_rewrite_rules()
functionを使って書き換えルールをフラッシュすることができます。しかしregister_post_type()
はinit
フックで呼び出されるので、init
フックが起動するたびに起動します。コーデックスが言っているのと同じこと:
WordPressの書き換えルールを自動的にフラッシュすることができるので、この関数はカスタム投稿タイプで使用すると便利です(通常、新しいカスタム投稿タイプの場合は手動で行う必要があります)。ただし、これはコストのかかる操作なので、絶対に必要な場合にのみ使用してください。
そのため、一度起動するものに物事をフックし、必要なときにだけルールをフラッシュするほうがよいのです。として @ cybmetaはすでにそれを示している あなたに。しかし、@ bainternetのアプローチに従うこともできます。
/**
* To activate CPT Single page
* @author Bainternet
* @link http://en.bainternet.info/2011/custom-post-type-getting-404-on-permalinks
* ---
*/
$set = get_option( 'post_type_rules_flased_mycpt' );
if ( $set !== true ){
flush_rewrite_rules( false );
update_option( 'post_type_rules_flased_mycpt', true );
}
彼はあなたの投稿タイプのためだけにoptions
テーブルに値を保存しています。そして値がそこになければ、彼は書き換えルールをフラッシュしています。それがそこにあるならば、彼はそれをしていません。
しかし、注意してください、実際には毎回db呼び出しを行います(キャッシュされていない場合)。ですから、テーマの場合は after_setup_theme
、プラグインの場合は register_activation_hook
というコードをフックすることをお勧めします。
書き換えルールをデバッグしている間、これらのようなプラグインは非常に役に立ちます。