我有一个按自定义字段中的数值排序的存档页。这将正确返回已排序的帖子,但不会显示没有自定义字段的帖子。
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
query_posts("paged=$paged&cat=7&posts_per_page=24&meta_key=custom_order&orderby=meta_value_num&order=ASC");
要正确返回已排序的帖子,然后返回没有自定义字段值的帖子,最好的方法是什么?Edit: 我想做的最后一个结果是创建一个类别归档页面,该页面首先显示特定的帖子,然后显示其他帖子。与粘性帖子非常相似,但仅适用于特定类别的归档。
Edit Two: 我正在尝试杰西卡的建议,我想我们就快到了。
问题是如果我现在开始order=ASC
然后,所有填充了自定义字段的帖子都会显示在没有关联值的帖子之后。如果我设置order=DESC
然后,首先返回具有自定义字段值的帖子,但返回的顺序相反。因此,它将显示4、3、2、1,然后是其他没有关联值的帖子。如何更正顺序,使其显示1、2、3、4,然后显示中没有值的其余帖子custom_order
领域
我在我的函数中添加了以下内容。php:
function wpse_55791_custom_order($clauses)
{
global $wp_query;
// check for order by custom_order
if ($wp_query->get(\'meta_key\') == \'custom_order\' && $wp_query->get(\'orderby\') == \'meta_value_num\')
{
// change the inner join to a left outer join,
// and change the where so it is applied to the join, not the results of the query
$clauses[\'join\'] = str_replace(\'INNER JOIN\', \'LEFT OUTER JOIN\', $clauses[\'join\']).$clauses[\'where\'];
$clauses[\'where\'] = \'\';
}
return $clauses;
}
add_filter(\'get_meta_sql\', \'wpse_55791_custom_order\', 10, 1);
function wpse_55791_custom_orderby($orderby)
{
global $wp_query;
// check for order by custom_order
if ($wp_query->get(\'meta_key\') == \'custom_order\' && $wp_query->get(\'orderby\') == \'meta_value_num\')
{
$orderby = "{$wpdb->postmeta}.meta_value=\'\', ".$orderby;
}
return $orderby;
}
add_filter(\'posts_orderby\', \'wpse_55791_custom_orderby\', 10, 1);