如果存在自定义字段值,如何从默认值全局更改Wordpress默认排序顺序

时间:2015-04-09 12:18:42

标签: php wordpress sorting

我正在从电影'的自定义字段中对帖子进行排序。我在电影'中有一个场地价值。自定义字段称为'排序'。我已将此代码添加到模板的循环中,我正在显示电影'根据'排序'对帖子进行排序值:

<?php $loop = new WP_Query( array( 'post_type' => ‘movies’, 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => 'sorting'  ) ); ?>

我试图全局检查(因为我需要在没有模板的多个页面上进行此排序),如果存在此自定义字段值,则根据meta_key值排序帖子&#39;排序&#39;因为他们在模板中。我可以在functions.php文件中添加一个函数来检查它是否存在,以及它是否像我在模板中那样对所有帖子进行排序?

这是我到目前为止所拥有的:

function sorting_by($query) {
  if( get_post_meta($post->ID, 'sorting', true)) {
     $query->set('orderby', 'meta_value');
     $query->set('meta_key', 'sorting');
     $query->set('order', 'ASC');
   }
}
add_action('pre_get_posts', 'sorting_by');

非常感谢

1 个答案:

答案 0 :(得分:2)

我认为您无法测试meta_value是否存在,因为您正在处理查询而不会检查此查询将检索的每个帖子。

如果您希望在没有模板的网页上使用它,请务必将此排序值设置为所有帖子。如果您打算这样做,请考虑将其替换为&#39;帖子类型&#39;测试,您将避免将这些参数设置为其他帖子类型:

检查当前的帖子类型是否是&#39;电影&#39; :

if( $query->get('post_type') == 'movies' ) {
    //$query->set('orderby', 'meta_value');
    $query->set('orderby', 'meta_value_num'); // Use this if 'sorting' is numeric.
    $query->set('meta_key', 'sorting');
    $query->set('order', 'ASC');
}