在需要的地方添加过滤器,然后remove it afterwards.
add_action(\'pre_get_posts\',\'blog_filter\');
// your query; presumably WP_Query
// your first loop
remove_action(\'pre_get_posts\',\'blog_filter\');
// another query; presumably WP_Query
// your second loop
您还可以使您的操作自行删除:
function blog_filter($query) {
remove_action(\'pre_get_posts\',\'blog_filter\');
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_post_type_archive(\'rg_blog\')) {
$query->set(\'post_type\', \'post\');
}
}
}
add_action(\'pre_get_posts\',\'blog_filter\');
您的代码,已重新组织:
// define the function; can be here or functions.php
function blog_filter($query) {
if ( !is_admin() && $query->is_main_query()) {
if ($query->is_post_type_archive(\'rg_blog\')) {
$query->set(\'post_type\', \'post\');
}
}
}
get_header();
// blog title and description query
$post_id = 4606;
// add the filter
add_action(\'pre_get_posts\',\'blog_filter\');
$queried_post = get_post($post_id);
// remove the filter; the query is done
remove_action(\'pre_get_posts\',\'blog_filter\');
$title = $queried_post->post_title; ?>
<h1><?php echo $title;?></h1><?php
// Main Loop (All Posts)
$post = $posts[0];
$c=0;
if (have_posts()) {
while (have_posts()) {
the_post();
// Featured Post
$c++;
if( !$paged && $c == 1) {
// stuff
// Other Posts
} else {
// the remaining posts
}
}
}
// The end of the loop
// third loop, a repeat of loop 1
// blog title and description query
$post_id = 4606;
$queried_post = get_post($post_id);
$title = $queried_post->post_title; ?>
<h1><?php echo $title;?></h1><?php
echo $queried_post->post_content;
get_footer();
我还没有测试过,但我认为它会更好。希望我没有任何语法错误。
编辑:
我仔细查看了你的代码(而不是看“违抗”)并注意到了一些事情。
您的筛选器只会影响主查询,因此您需要在加载页面模板之前进行添加—可能在functions.php
. 但我对这个问题的理解是,这个过滤器是用于第二个循环的。这意味着“主查询”检查是错误的您正在通过get_post
通过ID,所以过滤器对那些人来说是无关紧要的因此,要筛选主查询,您需要在functions.php
:
// define the function; can be here or functions.php
function blog_filter($query) {
// remove the filter; the query is done
remove_action(\'pre_get_posts\',\'blog_filter\');
if ( !is_admin() && $query->is_main_query()) {
if ($query->is_post_type_archive(\'rg_blog\')) {
$query->set(\'post_type\', \'book\');
}
}
}
add_action(\'pre_get_posts\',\'blog_filter\');
并且在其他任何地方都没有添加或删除操作。但我不确定这是你想要的。两个
get_post
呼叫应不受影响。