我遇到了如何在Wordpress中对标题进行排序的问题。如果我只知道如何在MySQL中解决这个问题,那就太好了。 (如果某人有特定于wordpress的答案,那对我来说会容易得多)
我有一个数据库,标题(数据库表中的一个字段)称为post_title。标题存储名称和年份,空格为
例如
Sweden 2017
Sweden 2016
Norway 2018
Norway 2019
我想按照以下方式排序:(按年份递减,按名称递增)
Norway 2019
Norway 2018
Sweden 2017
Sweden 2016
更新 我尝试使用WP_Query进行Wordpress内置排序:
$module_args = array(
'posts_per_page' => -1,
'post_type' => 'project',
'include_children' => false,
'orderby' => 'title',
'order' => 'DESC',
'no_found_rows' => true //No pagination needed
);
//Do the filtering and retrieve all projects with current service
$projects = get_posts( $module_args );
然后我得到了这个结果:
Yacht 2011
Vasastan 2008
Ulrikagatan 2008
Thailand 2010 (?)
Strandvägen 2007
但应该是:
Yacht 2011
Thailand 2010
Ulrikagatan 2008
Vasastan 2008
Strandvägen 2007
答案 0 :(得分:2)
请使用以下代码获取您需要的内容:
$args = array(
'orderby' => 'title',
'order' => 'DESC',
);
$query = new WP_Query( $args );
答案 1 :(得分:1)
在Mysql中
您可以在int中使用转换为最后四个字符,在此之后使用标题
Order by CONVERT(right(post_title, 4),UNSIGNED INTEGER) , post_title
答案 2 :(得分:1)
你可以用PHP做到这一点:
$titles = [
'Sweden 2017',
'Sweden 2016',
'Norway 2018',
'Norway 2019',
];
usort($titles, function($a, $b) {
$asplit = preg_split('/\s/', $a);
$bsplit = preg_split('/\s/', $b);
$strcmp = strcmp($asplit[0], $bsplit[0]);
if ( $strcmp ) {
return $strcmp;
}
else {
return $bsplit[1] - $asplit[1];
}
});
// print_r($titles) yields:
//
// Array
// (
// [0] => Norway 2019
// [1] => Norway 2018
// [2] => Sweden 2017
// [3] => Sweden 2016
// )
编辑:修正拼写错误,现在可以正常使用
答案 3 :(得分:1)
首先,您需要拆分字符串和数字的值,然后将字符串格式的数字转换为intger,然后根据需要进行排序。
select * from table_name order by
cast(substring(post_title,-4), INTEGER) desc,
SUBSTRING_INDEX(post_title,' ',1) asc
答案 4 :(得分:0)
感谢大家的投入!在提出解决方案时,它有很大的帮助。
这是我的解决方案:
$newsort_projects = array();
foreach ( $projects as $key_item=>$arr_item)
{
$title = $arr_item->post_title;
$year_title = substr($title,-4,4);
$newsort_projects[] = array(
'ID' => $arr_item->ID,
'year'=>$year_title
);
}
usort($newsort_projects, array($this, 'sort_by_year'));
$newarr_projects = array();
foreach ( $newsort_projects as $key_item=>$arr_item )
{
foreach($projects as $pkey => $p)
{
if ($arr_item['ID'] == $p->ID) {
$key_to_add = $pkey;
break;
}
}
$newarr_projects[] = $projects[$key_to_add];
}
然后我在类中有一个函数按关键年份对多维数组进行排序:
private function sort_by_year($a, $b) {
return $b['year']-$a['year'];
}