如果帖子不在元查询中,则忽略粘滞帖子

时间:2015-04-27 作者:MIC

我有这样一个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(); ?>

2 个回复
最合适的回答,由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() 应在之间使用endwhileendif

要从分页页面中排除粘性post查询,只需在if ( !is_paged() ) { YOUR STICKY POST CODE } 条件

SO网友:fischi

您可以通过添加

\'ignore_sticky_posts\' => true,
到您的查询。您还可以设置ignore_sticky_posts 至1。

请注意,如果帖子有粘性,但符合其他标准,则仍会发送帖子。

结束

相关推荐

在WordPress中编写jQuery函数的正确方法

我正在使用基于AJAX的Wordpress模板(自定义),但在让jQuery正常运行时遇到了一些问题。我已经把所有的东西(按正确的顺序)排好了队,在某种程度上它确实起了作用,但我发现自己不得不写jQuery(\'... 与速记相反$(... 每次我想添加新的脚本片段时。我做错什么了吗?请参阅下面我的(精简)自定义JS文件;function customThemeFunctions(){ var windowHeight = jQuery(window).height();