使用自定义字段的orderby meta_Value的自定义查询

时间:2011-04-23 作者:Maor Barazany

Aa你知道,从WP3开始。0有用于自定义高级查询的选项,这很好。至此,一些自定义字段的查询参数(如meta\\u key、meta\\u value)已被弃用为新的meta\\u查询参数(see here)

我尝试使用新语法进行一个非常简单的查询,通过包含指定meta\\u键(order\\u in\\u archive)的特定post\\u类型(服务)查询post,这与预期的一样。但是-我想按meta\\u值按查询排序,但没有成功。

这是我的问题-

   query_posts(
    array(  \'post_type\' => \'services\',
        \'order\' => \'ASC\',
        \'orderby\' => \'meta_value\',
        \'meta_query\' => array(
            array(\'key\' => \'order_in_archive\'))
    )
);
我还尝试了按meta\\u value\\u numeric和meta\\u value排序,但无论如何,结果都是按发布日期排序的(就像普通帖子一样)。有人知道怎么做吗?

谢谢

8 个回复
最合适的回答,由SO网友:Ján Bočínec 整理而成

您可以使用旧方法(我在WP 3.1.1上测试过)为orderby参数定义元键。。。

query_posts(
    array(  \'post_type\' => \'services\',
            \'order\'     => \'ASC\',
            \'meta_key\' => \'some_key\',
            \'orderby\'   => \'meta_value\', //or \'meta_value_num\'
            \'meta_query\' => array(
                                array(\'key\' => \'order_in_archive\',
                                      \'value\' => \'some_value\'
                                )
                            )
    )
);

SO网友:Ryan Taylor

This issue in general is cleared up as of WordPress 4.2 通过使用命名查询。e、 g。

$args = array(
  \'post_type\' => \'services\',
  \'orderby\'   => \'order_clause\',
  \'meta_query\' => array(
       \'order_clause\' => array(
            \'key\' => \'order_in_archive\',
            \'value\' => \'some_value\',
            \'type\' => \'NUMERIC\' // unless the field is not a number
)));
对我来说,我想按数字字段排序,我必须使用\'type\' => \'NUMERIC\' 在元查询内部。

SO网友:Evan Yeung

WP Codex在解决这个问题时实际上很混乱。

实际上,您不需要使用meta\\u query参数来使用orderby,而是使用meta\\u key参数,虽然WP Codex不赞成使用meta\\u key参数,但它已在此处建立:How do you use orderby with meta_query in Wordpress 3.1? orderyby仍然需要meta\\u密钥。

应该是这样的

query_posts( array(
  \'post_type\' => \'services\',
  \'order\' => \'ASC\',
  \'orderby\' => \'meta_value\',
  \'meta_key\' => \'order_in_archive\'
) )

SO网友:Jesus CMD

这很简单:

这是我的代码:

query_posts(array( 
        \'post_type\' => \'directors\',
        \'posts_per_page\' => -1,
        \'order\'    => \'ASC\',
        \'orderby\'  => \'director_weight\',
        \'meta_key\' => \'director_weight\'
) );
主要细节是:包括meta_key, 我的代码没有排序,除非meta_key 包括在内,仅此而已:

以下是directors 图片订购者director_weight:

<?php 
    query_posts(array( 
        \'post_type\' => \'directors\',
        \'posts_per_page\' => -1,
        \'order\'    => \'ASC\',
        \'orderby\'  => \'director_weight\',
        \'meta_key\' => \'director_weight\'
    ) );
    while (have_posts()) : the_post();
?>  
    <li <?php echo get_field(\'director_weight\') ?>>
        <img src="<?php echo get_field(\'director_imagen\') ?>">
    </li>
<?php
    endwhile;
    wp_reset_query();
?>

order_by custom fiel wordpress

SO网友:Brad Dalton

不使用query_posts.

$meta_query = new WP_Meta_Query( $meta_query_args );

$meta_query_args = array(
   \'post_type\' => \'services\',
    \'order\'     => \'ASC\',
    \'meta_key\' => \'your_key\',
    \'orderby\'   => \'meta_value\', //or \'meta_value_num\'
    \'meta_query\' => array(
                    array(\'key\' => \'order_in_archive\',
                        \'value\' => \'some_value\'
)));
使用WP_Meta_Query parameters

SO网友:pingle60

以下解决方案有效:

$args = array(
    \'post_type\' => \'services\',
    \'order\' => \'ASC\',
    \'orderby\'   => \'order_clause\',   
    \'meta_query\' => array(
        \'order_clause\' => array(
            \'key\' => \'order_in_archive\'
        )
    )
);
您需要提供meta\\u query子数组的键order_clause 为您的orderby 价值

SO网友:gegere

我发现这很有效。

<?php 
query_posts(
array(  \'posts_per_page\' => \'-1\',
        \'post_type\' => \'services\',
        \'order\'     => \'DESC\',
        \'meta_key\' => \'_order\',
        \'orderby\'   => \'meta_value_num\', //or \'meta_value_num\'
      )
);

SO网友:recurse

我有一组自定义事件日期,需要按日期降序排序。由于我的自定义事件日期存储在我的wp\\U POSTETA表中,并且通常与post\\U日期或修改日期不同,因此这对我很有用:

  $args = array(
    \'post_type\' => \'events\', // my post type - yours can be \'posts\'
    \'post_status\' => \'publish\', // only get posts with this status
    \'orderby\' => \'meta_value\', // orderby the meta_value of the following meta_key
    \'meta_key\' => \'my_custom_eventdate\', // the custom meta_key name
    \'order\'=> \'DESC\' // sort descending
  );

  $posts = new WP_Query($args);
然后,您可以循环浏览$帖子,如下所示:

foreach($posts->posts as $p){

    $post_id = $p->ID;
    // and so on ...

    // # example of how I retrieve my event date
    $event = get_post_meta($post_id, \'my_custom_eventdate\', true);
}

结束

相关推荐