我有这样一个wp查询参数:
$args = array(
\'post_type\'=> \'myposttype\',
\'posts_per_page\' => 10,
\'meta_query\' => array(
\'relation\' => \'AND\',
array(\'key\' => \'routeFrom\',\'value\' => \'rome\',\'compare\' => \'LIKE\'),
array(\'key\' => \'routeTo\',\'value\' => \'paris\',\'compare\' => \'LIKE\'),
)
);
每个我的帖子都有自定义字段routeFrom和routeTo。在本例中,如果routeFrom等于Rome,routeTo等于Paris,则wp查询将显示这些帖子。
问题是,无论我使用什么元查询,都会出现粘性帖子。
如果只匹配元查询,我想显示特定的粘性帖子。
现实生活中的例子是:我有一个路由搜索页面,我想在所有帖子的顶部显示粘性帖子,但前提是它也满足元查询(在本例中是特定的路由)。
我正在使用sticky posts插件“sticky Custom Post Types”,但帖子存储在全局“sticky\\u posts”选项字段中,就像普通帖子一样。
有什么帮助吗?
Updated code:
$stickyargs = array(
\'post_type\'=> \'trips\',
\'posts_per_page\' => -1,
\'post__in\' => get_option( \'sticky_posts\' ),
\'meta_query\' => array(
\'relation\' => \'AND\',
array(\'key\' => \'routeFrom\',\'value\' => $_GET[\'from\'],\'compare\' => \'LIKE\'),
array(\'key\' => \'routeTo\',\'value\' => $_GET[\'to\'],\'compare\' => \'LIKE\'),
)
);
$args = array(
\'post_type\'=> \'trips\',
\'paged\' => $paged,
\'posts_per_page\' => 10,
\'post__not_in\' => get_option( \'sticky_posts\' ),
\'meta_query\' => array(
\'relation\' => \'AND\',
array(\'key\' => \'routeFrom\',\'value\' => $_GET[\'from\'],\'compare\' => \'LIKE\'),
array(\'key\' => \'routeTo\',\'value\' => $_GET[\'to\'],\'compare\' => \'LIKE\'),
)
);
$search = new WP_Query($args);
$searchsticky = new WP_Query($stickyargs);
?>
<?php if ( $searchsticky->have_posts() ) : ?>
<?php while ( $searchsticky->have_posts() ) : $searchsticky->the_post(); ?>
<div class="search_item">
<?php the_content(); ?>>
</div>
<?php endwhile; ?>
<?php else : ?>
Not found
<?php endif; wp_reset_query(); ?>
<?php if ( $search->have_posts() ) : ?>
<?php while ( $search->have_posts() ) : $search->the_post(); ?>
<div class="search_item">
<?php the_content(); ?>>
</div>
<?php endwhile; ?>
<?php else : ?>
Not found
<?php endif; wp_reset_query(); ?>
最合适的回答,由SO网友:Pieter Goosen 整理而成
自定义查询和粘滞帖子是一个很难处理的问题。我不知道你的设置看起来如何,你的用户案例是什么,但你最好的解决方案是在这里运行两个查询,第一个查询获取你的粘性帖子,另一个查询显示正常帖子
第一个查询的参数如下所示
$args = array(
\'post_type\' => \'myposttype\',
\'posts_per_page\' => -1,
\'post__in\' => get_option( \'sticky_posts\' ),
\'ignore_sticky_posts\' => 1,
\'meta_query\' => array(
\'relation\' => \'AND\',
array(\'key\' => \'routeFrom\',\'value\' => \'rome\',\'compare\' => \'LIKE\'),
array(\'key\' => \'routeTo\',\'value\' => \'paris\',\'compare\' => \'LIKE\'),
)
);
第二个查询参数需要排除这些粘滞
$args = array(
\'post_type\'=> \'myposttype\',
\'posts_per_page\' => 10,
\'post__not_in\' => get_option( \'sticky_posts\' ),
\'meta_query\' => array(
\'relation\' => \'AND\',
array(\'key\' => \'routeFrom\',\'value\' => \'rome\',\'compare\' => \'LIKE\'),
array(\'key\' => \'routeTo\',\'value\' => \'paris\',\'compare\' => \'LIKE\'),
)
);
只需确保您重置了这两个查询。
如前所述,我不知道您的确切设置和用户案例,但如果这是主要查询,您应该查看pre_get_posts
相应地更改主查询。如果是,请查看this post 我最近在主页外添加了一些贴子。
编辑我完全忘了添加ignore_sticky_posts
到第一组查询参数。现在应该可以了。我已经相应地更新了代码
代码上只有一到两个注释
您应该使用wp_reset_postdata()
重置查询,而不是wp_reset_query()
. 后者用于query_posts
你永远不应该使用它。而且wp_reset_postdata()
应在之间使用endwhile
和endif
要从分页页面中排除粘性post查询,只需在if ( !is_paged() ) { YOUR STICKY POST CODE }
条件