查询2个元键值和一个类别

时间:2010-11-15 作者:user1327

我有一个工作很好的wp查询-它返回一个特色帖子列表。

WP\\u Query(“category\\u name=office&;meta\\u key=featured\\u post&;meta\\u value=Yes&;posts\\u per\\u page=3”);

但是,我想在查询中添加第二个自定义键(自定义顺序字段),然后根据该键的元值的数值进行排序。。在WP\\u查询中是否可以使用2个meta\\u键值?如果没有,是否可以使用SQL查询语句?

2 个回复
最合适的回答,由SO网友:Wyck 整理而成

查询值参数可以设置为true(返回单个结果)或false(数组)。http://codex.wordpress.org/Function_Reference/get_post_meta

例如http://www.mattvarone.com/wordpress/query-multiple-meta-values/

SO网友:edelwater

通常在WordPress中,您永远不会使用数据库调用/SQL调用(您的第二个问题)

(关于您的第一个问题:如何添加多个元数据值(以及如何使用它们进行最疯狂的操作))对于查询中的其他条目,请使用下面的类型,这里的连接和排序方式用于元键之间的其他可能关系。在这个示例中,您可以看到我对键的A*B值进行排序。只需复制、粘贴并根据您的喜好进行调整。(请注意,在更高级的场景中,除了join和orderby之外,还有更多的选项可供使用)。

 global $edl_global_join;
 global $edl_global_orderby;
 global $wp_query;

 function edl_posts_join ($join) {
   global $edl_global_join;
   if ($edl_global_join) $join .= " $edl_global_join";
   return $join;
 }

 function edl_posts_orderby ($orderby) {
  global $edl_global_orderby;
  if ($edl_global_orderby) $orderby = $edl_global_orderby;
  return $orderby;
 }

 add_filter(\'posts_join\',\'edl_posts_join\');
 add_filter(\'posts_orderby\',\'edl_posts_orderby\');

 $edl_global_join = 
 "JOIN $wpdb->postmeta meta1 ON (meta1.post_id = $wpdb->posts.ID AND meta1.meta_key = \'TOPSPEED\')" .
 "JOIN $wpdb->postmeta meta2 ON (meta2.post_id = $wpdb->posts.ID AND meta2.meta_key = \'ANOTHER_THING\')";
 $edl_global_orderby = " meta1.meta_value * meta2.meta_value DESC";

 $wp_query = new WP_Query($args);
如果要根据元数据的计算结果显示某些字段,可以使用,例如:

 $car->display_meta_size();
这实际上是该类中的以下方法:

    //
// specific display for size overviews
//
function display_meta_size()
{
    $this->mMetaData->GetValuesFromWP();
    ?>
    <table width="100%">
    <?php   
    $this->mMetaData->ShowIcon();
    $this->mMetaData->ShowSize();
    ?>
    </table>
    <?php
} 
其中GetValuesFromWP()方法来自wp元数据类:

// get the values stored in WordPress
function GetValuesFromWP() {
    global $post;
    $custom = get_post_custom($post->ID);

    foreach ($this->mArrMetaDataFields as $str_meta_data_field)
    {
        $this->MetaDataWpValues[$str_meta_data_field] = 
                    $custom[$str_meta_data_field][0];
    }
    $this->MetaDataWpValues[\'SPECIAL\'] = $custom[\'SPECIAL\'][0];
}
(因此,在上面的join函数中,完全可以执行您想要的操作)。

另请参见:Getting Custom Field data from a page hierarchy

结束

相关推荐