基于元值的wordpress查询

时间:2015-01-20 18:43:52

标签: wordpress custom-post-type wp-query

我在网站上工作并构建自定义帖子类型。在这个自定义帖子类型中,我添加了一个元字段,您可以在其中选择1到16之间的数字。这些数字与我主页上的特定位置相对应。但现在我的问题出现了。如何在不重复的情况下在这些特定位置查询这些帖子。

所以例如......

 这里有一个meta值为1的帖子  这里有一个meta值为2的帖子  这里有一个meta值为3的帖子

等..

希望有人可以帮助我一点

1 个答案:

答案 0 :(得分:0)

根据布局逻辑的复杂程度,有几种方法可以解决这个问题。如果您基本上只需按顺序遍历16个帖子,则可以使用查询中的orderby参数对帖子进行排序:

$args = array(
              'post-type' => 'YOUR_POST_TYPE',
              'orderby' => 'meta_value_num',
              'meta_key' => 'YOUR_METAFIELD_SLUG'
       );

$customposts = new WP_Query($args);
while( $customposts->have_posts() ): $customposts->the_post();

// loop goes here

如果您需要更复杂的东西,您可以通过查询一次然后使用条件来检查元值来避免重复查询。例如,使用上面示例中的查询...

// Position 1 on your page

<div class="position-1">

<?php
while( $customposts->have_posts() ): $customposts->the_post();
$meta_value = get_post_meta(get_the_ID(), 'YOUR_METAFIELD_SLUG', true);

// Only print something here if the meta value is what we want
if( $meta_value == 1 ) : 
   the_title();
   the_content();
endif;

// Reset the loop
$customposts->rewind_posts(); ?>

</div>

// Position 2 on your page

<div class="position-2">
<?php
while( $customposts->have_posts() ): $customposts->the_post();
$meta_value = get_post_meta(get_the_ID(), 'YOUR_METAFIELD_SLUG', true);
if( $meta_value == 2 ) : 
   the_title();
   the_content();
endif;

// Reset the loop again
$customposts->rewind_posts(); ?>

....等等。

您可能会发现这些有用:

http://codex.wordpress.org/Function_Reference/get_post_meta

http://codex.wordpress.org/Class_Reference/WP_Query