Ordering Posts By Meta Data

时间:2016-09-16 作者:user1235285

我试图按元数据排序帖子,这很好,但没有元数据的帖子不会显示出来。

我在Stack Exchange上尝试了几条指南,它们提供了一个快速的Google,其中有人说它们工作得很好,但添加到我的网站上,代码只是不想显示没有元数据的帖子。

我试图实现的本质上是一个粘性帖子,因此当用户单击“Pin post”时,一段帖子元数据存储为"pin_".$user (因此在这篇文章中是独一无二的)值为"1".

我想展示有价值的帖子"1" 在顶部,随后按日期排序,之后应按日期顺序显示没有元数据的所有其他帖子。

我意识到这个代码是不完整的,但这里是我目前所拥有的;

query_posts(array(\'post_type\' => array(\'beauty\', \'health\', \'food\'), \'author_in\' => $follow, \'orderby\' => \'meta_value_num\',
        \'meta_key\' => \'pin_\'.$user, \'showposts\' => -1, \'order\' => \'DESC\')); if ( have_posts() ) : while ( have_posts() ) : the_post(); 
我将如何调整它以产生所需的结果?

2 个回复
SO网友:cjbj

首先:don\'t use query_posts. 这将混淆主要的WordPress循环。

您将需要两个查询。首先使用您已经构建的查询来获取优先帖子:

$query1 = new WP_Query( $args ); // here use the $args you already have
现在计算返回的帖子数,以设置第二次查询的最大返回:

$count = $query1->post_count;
$args = array (\'posts_per_page\'=>15-$count) // and any other arguments you may want to parse
$query2 = new WP_Query( $args );
现在循环两个查询以显示它们。请注意,如果您需要分页,您必须做一些更聪明的事情,以确保您在页面上获得正确的帖子和帖子数量。

SO网友:cowgill

您将希望创建一个新查询,并使用meta_query 参数

像这样的事情应该会让你继续(未经测试)。看见WP_Query() 有关更多示例和参数。

$args = array(
  \'post_type\' => array(
    \'beauty\', \'health\', \'food\',
  ), 
  \'author\'     => $follow, 
  \'orderby\'    => \'meta_value_num\',
  \'meta_key\'   => \'pin_\'.$user,
  \'showposts\'  => -1,
  \'order\'      => \'DESC\',
  \'meta_query\' => array(
    \'relation\' => \'OR\',
    array(
     \'key\'      => \'pin_\'.$user\',
     \'compare\' => \'NOT EXISTS\',
    )
   )
  ); 

$query = new WP_Query( $args );

// The loop
if ( $query->have_posts() ) {
  // do something
} else {
  // no posts found
}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在