私はdevでうまく動作するカスタムポストタイププラグインを開発しています。本番に移行したので、CPTのテンプレートを表示しようとすると404が表示されます。
それで、2つの質問:
1-階層を通過するのに必要なパスWPを決定するための何らかのメカニズムがありますか?
2-なぜ単一のページまたはインデックスページが表示されないのですか?
404の終わりに$ wp_queryとスタックトレースをダンプしました。これは私が見つけたものの一部です:
[query] => Array
(
[page] =>
[pagename] => refletters/proximity
)
[request] => SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND (wp_posts.ID = '0') AND wp_posts.post_type = 'page' ORDER BY wp_posts.post_date DESC
[posts] => Array
(
)
[queried_object] =>
[queried_object_id] => 0
そしてスタックトレース:
2013-04-27 22:16:41 - 24.52.197.40 - TRACE - index.php - 404.php[39] -
wordpress/wp-content/themes/notoriousconsultant/404.php[39] - aaLog->logtrace
wordpress/wp-includes/template-loader.php[50] - include
wordpress/wp-blog-header.php[16] - require_once
wordpress/index.php[17] - require
ご協力いただきありがとうございます。
新しいパブリック投稿タイプまたは分類法を登録するときは、常に書き換えルールをフラッシュしてください。そうでなければ、URLがクエリにマッピングされるときに内部の書き換え規則はそれを考慮に入れません。
registered_post_type
とregistered_taxonomy
にフックすることでそのプロセスを自動化できます。
以下は、コメントや他の人々からのフィードバックに基づいて更新されたコードです。
プラグインとしてダウンロード T5 Silent Flush GitHubで。
add_action( 'registered_post_type', 't5_silent_flush_cpt', 10, 2 );
add_action( 'registered_taxonomy', 't5_silent_flush_tax', 10, 3 );
/**
* Flush rules for custom post types.
*
* @wp-hook registered_post_type
* @param string $post_type
* @param stdClass $args
* @return void
*/
function t5_silent_flush_cpt( $post_type, $args )
{
if ( $args->_builtin )
return;
if ( ! $args->public )
return;
if ( ! $args->publicly_queryable )
return;
if ( ! $args->rewrite )
return;
$slug = $post_type;
if ( isset ( $args->rewrite['slug'] ) && is_string( $args->rewrite['slug'] ) )
$slug = $args->rewrite['slug'];
$rules = get_option( 'rewrite_rules' );
if ( ! isset ( $rules[ $slug . '/?$'] ) )
flush_rewrite_rules( FALSE );
}
/**
* Flush rules for custom post taxonomies.
*
* @wp-hook registered_taxonomy
* @param string $taxonomy
* @param string $object_type
* @param array $args
* @return void
*/
function t5_silent_flush_tax( $taxonomy, $object_type, $args )
{
// No idea why we get an array here, but an object for post types.
// Objects are easier to write, so ...
$args = (object) $args;
if ( $args->_builtin )
return;
if ( ! $args->public )
return;
if ( ! $args->rewrite )
return;
$slug = $taxonomy;
if ( isset ( $args->rewrite['slug'] ) && is_string( $args->rewrite['slug'] ) )
$slug = $args->rewrite['slug'];
$rules = get_option( 'rewrite_rules' );
if ( ! isset ( $rules[ $slug . '/(.+?)/?$'] ) )
flush_rewrite_rules( FALSE );
}
これにより、新しい投稿タイプまたは分類法を作成するたびにルールがフラッシュされます。パーマリンクの設定を再度訪れる必要はありません。