我试图按元数据排序帖子,这很好,但没有元数据的帖子不会显示出来。
我在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();
我将如何调整它以产生所需的结果?
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
}