因为Wordpress的原生顺序系统有点愚蠢(即:1个香蕉,10个香蕉,2个香蕉,…)
我需要添加一个插件,让我设置数字标题的顺序。问题是当我设置orderby=
具有menu_order title
, 菜单的顺序就像我在后端设置的一样。但对于那些订单设置为0的。。。我想回到orderby=title
.
总之,我希望orderby=menu_order title
如果顺序设置为0,则返回标题。
因为Wordpress的原生顺序系统有点愚蠢(即:1个香蕉,10个香蕉,2个香蕉,…)
我需要添加一个插件,让我设置数字标题的顺序。问题是当我设置orderby=
具有menu_order title
, 菜单的顺序就像我在后端设置的一样。但对于那些订单设置为0的。。。我想回到orderby=title
.
总之,我希望orderby=menu_order title
如果顺序设置为0,则返回标题。
尽管如此,MySQL并没有以本机方式进行“自然”排序there are attempts to make it work.
我不知道你提到的那个插件是如何工作的,但按排序menu_order
使用post_title
回退是微不足道的。
add_action(
\'pre_get_posts\',
function ($qry) {
if ($qry->is_main_query()) {
$qry->set(\'orderby\',\'menu_order title\');
}
}
);
当然,那会menu_order
在排序的顶部等于0,我认为这不是您想要的。像MySQL一样,WP_Query
没有“自然排序”功能,但如果您想按menu_order
在哪里menu_order
大于0,否则按标题,这是我认为您想要的(至少在问题的关键点上),您可以使用过滤器来实现。
add_action(
\'posts_orderby\',
function ($orderby,$post) {
global $wpdb;
return " IF({$wpdb->posts}.menu_order > 0, {$wpdb->posts}.menu_order {$wpdb->posts}.post_title, {$wpdb->posts}.post_title) ";
},
10,2
);
几乎未经测试。可能是马车排空警告。不退款。您可以使用类似的过滤器来尝试实现真正的自然排序,但我没有时间编写、测试和调试它。
我的目标是一个单页垂直滚动的网站。我使用此代码逐个显示所有页面: <!-- All Pages --> <?php $pages = get_pages(); foreach ($pages as $page_data) { $content = apply_filters(\'the_content\', $page_