我正在从电影'的自定义字段中对帖子进行排序。我在电影'中有一个场地价值。自定义字段称为'排序'。我已将此代码添加到模板的循环中,我正在显示电影'根据'排序'对帖子进行排序值:
<?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');
非常感谢
答案 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');
}