我目前正在尝试输出音乐标题列表,并希望排序忽略(但仍显示)该标题的初始文章。
例如,如果我有乐队列表,它将在WordPress中按字母顺序显示,如下所示:
- 黑色安息日
- 齐柏林飞艇
- 平克·弗洛伊德(乐队名
- 披头士
- 纠结
- 滚石乐队
- 薄丽兹
相反,我希望按字母顺序显示它,而忽略初始文章“ The”,如下所示:
- 披头士
- 黑色安息日
- 纠结
- 齐柏林飞艇
- 平克·弗洛伊德(乐队名
- 滚石乐队
- 薄丽兹
去年,我在一个博客条目中遇到了一个解决方案,该提议在中提供了以下代码functions.php
:
function wpcf_create_temp_column($fields) {
global $wpdb;
$matches = 'The';
$has_the = " CASE
WHEN $wpdb->posts.post_title regexp( '^($matches)[[:space:]]' )
THEN trim(substr($wpdb->posts.post_title from 4))
ELSE $wpdb->posts.post_title
END AS title2";
if ($has_the) {
$fields .= ( preg_match( '/^(\s+)?,/', $has_the ) ) ? $has_the : ", $has_the";
}
return $fields;
}
function wpcf_sort_by_temp_column ($orderby) {
$custom_orderby = " UPPER(title2) ASC";
if ($custom_orderby) {
$orderby = $custom_orderby;
}
return $orderby;
}
然后用add_filter
之前和remove_filter
之后包装查询。
我已经尝试过了,但是在我的网站上一直出现以下错误:
WordPress数据库错误:['order子句'中的未知列'title2']
从wp_posts中选择wp_posts。*在1 = 1且wp_posts.post_type ='release'AND(wp_posts.post_status ='publish'或wp_posts.post_status ='private')的情况下按顺序排序(title2)ASC
我不会撒谎,我对WordPress的php部分还很陌生,所以我不确定为什么会收到此错误。我可以看到它与'title2'列有关,但是据我了解,第一个功能应该解决这一问题。另外,如果有更聪明的方法可以做到这一点,我全都听不见。我一直在搜寻并搜索该站点,但实际上并没有找到很多解决方案。
如果有帮助,我使用过滤器的代码将如下所示:
<?php
$args_post = array('post_type' => 'release', 'orderby' => 'title', 'order' => 'ASC', 'posts_per_page' => -1, );
add_filter('post_fields', 'wpcf_create_temp_column'); /* remove initial 'The' from post titles */
add_filter('posts_orderby', 'wpcf_sort_by_temp_column');
$loop = new WP_Query($args_post);
remove_filter('post_fields', 'wpcf_create_temp_column');
remove_filter('posts_orderby', 'wpcf_sort_by_temp_column');
while ($loop->have_posts() ) : $loop->the_post();
?>