我需要订购一个类别中的文章,根据标题中的最后一个单词按字母顺序排列。我在网上看到了一些建议,但没有一个是正确的。
我使用一个自定义布局的类别,基于它的id,例如,名为类别-3.php的文件,下面的代码显示帖子。
因此,我需要按标题中的最后一个单词按字母顺序组织这一页上的帖子。
发布于 2018-11-12 07:40:07
我会用wp_query。
将这个放在您的functions.php中:
/**
* Order posts by the last word in the post_title.
* Activated when orderby is 'wpse_last_word'
*/
add_filter('posts_orderby', function($orderby_sql, \WP_Query $q) {
$orderbys = $q->get('orderby');
if (!$orderbys) {
return;
}
if ($orderby_sql) {
$orderby_sql_array = [$orderby_sql];
}
else {
$orderby_sql_array = [];
}
if (!is_array($orderbys)) {
$words = explode(' ', $orderbys);
$orderbys = [];
foreach ($words as $word) {
$orderbys[$word] = $q->get('order');
}
}
global $wpdb;
foreach ($orderbys as $orderby => $direction) {
if ($orderby == 'wpse_last_word') {
if (!$direction || !in_array(strtoupper($direction), ['ASC', 'DESC'])) {
$direction = 'DESC';
}
$orderby_sql_array[] = "SUBSTRING_INDEX({$wpdb->posts}.post_title, ' ', -1) $direction";
}
}
return implode(', ', $orderby_sql_array);
}, 100, 2);
现在您可以在您的分类-3.php(没有测试)中这样做了:
但是,您肯定可以使用wp_query,并将它们用作您的args:(如果需要,可以添加其他args )。
$args = [
'posts_per_page' => 10,
'post_type' => 'post',
'orderby' => 'wpse_last_word',
'order' => 'ASC'
];
$the_query = new WP_Query( $args );
发布于 2023-05-22 22:31:52
如果您使用的是自定义的post类型,那么这可能适用于您:
function my_movies_posts_orderby( $orderby, $query ) {
if ( $query->is_main_query() && $query->is_post_type_archive( 'my-movie' ) ) {
$orderby = "SUBSTRING_INDEX(post_title, ' ', -1)";
}
return $orderby;
}
add_filter( 'posts_orderby', 'my_movies_posts_orderby', 10, 2 );
https://wordpress.stackexchange.com/questions/319007
复制相似问题