archive-my-post-type.php
ページを作成しました。pre_get_posts
を使うことができるというスタック。そう...
私はpre_get_posts
と私が言うことができるものからいくつかの調査をしました...
pre_get_posts
はメインループを変更するために使用されます。コーデックス この警告を与える:
ターゲットクエリの識別
Pre_get_postsを使用するときは、変更しているクエリに注意してください。便利なツールの1つがis_main_query()です。これは、変更しているクエリがメインクエリのみであることを確認するのに役立ちます。
is_main_query()
。だから私は正確にページで実行されたクエリを確認するためにいくつかのコードを追加し、見たtwoクエリ...
このクエリはページ全体の上にあります(その後に私のすべてのカスタム投稿が続きます)...
'SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'press-release' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 10'
他のクエリはサイドバー...の上にあります。
'SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 5'
カスタム投稿タイプをthisqueryに追加します。
できます(そして、SHOULD)pre_get_postsを使ってこれを達成しますか?
私はかなり緑なので、この質問が理にかなっていることを本当に願っています。
そうですね、あなたはpre_get_posts
を使うべきではありません、それはサイトの中のすべてのクエリを変えるでしょう。
また、最近の投稿プラグインによって行われたクエリは、メインのクエリではありません。メインクエリは、URLからクエリ変数を解析した後に現在のページを表示するために作成されます。現在のページテンプレートに対しては、それが責任を負います。
あなたがすべきことは、フィルタフィルタwidget_posts_args
です:
add_filter( 'widget_posts_args', 'wp130512_recent_posts_args');
/**
* Add CPTs to recent posts widget
*
* @param array $args default widget args.
* @return array $args filtered args.
*/
function wp130512_recent_posts_args($args) {
$args['post_type'] = array('post', 'my_CPT');
return $args;
}
OR
より多くの制御のために最近の投稿ウィジェットクラス(WP_Widget_Recent_Posts
)を拡張してください。
コード例: http://rollinglab.com/2012/06/extend-wordpress-recent-posts-widget/ /