帖子按标题排序第二个单词

时间:2014-06-21 作者:duduwish

这是一个常见的问题,我还没有找到一个简单的答案
我想生成自定义帖子类型标题的列表。im使用\'orderby\' => \'title\' 按字母顺序显示。标题是姓名和姓氏,我想按姓氏排序。我知道我可以创建名和姓分开的元字段,并按姓字段排序。但我真的很想看看是否有好的方法explode 这个\'title\' 并将第二个单词传入“orderby”。

这是基本代码:

<?php
// Get the \'Actors\' post type

$args = array(
\'post_type\' => \'actors\',
\'orderby\' => \'title\',
\'order\' => \'ASC\',
\'nopaging\' => true,
\'cache_results\' => false,
\'update_post_meta_cache\' => false
);
$loop = new WP_Query($args);

while($loop->have_posts()): $loop->the_post();
echo \'<li><img src="\' . get_post_meta(get_the_ID(),\'_dtm_small_image\', [0]) . \'"><span>\' . get_the_title() . \'</span></li>\';
endwhile;
wp_reset_query();
?> 
Iv\'e试图:

$gettitle = get_the_title();
$lastname = explode(" ", $gettitle);
然后更改为\'orderby\' => $lastname[1], . 但它不起作用
是否没有好的方法可以使用标题中的第二个单词对帖子进行排序?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

最简单的方法可能是将标题保存为姓/名,然后它们将自然排序。然后,在模板中输出标题时,可以反转标题。

您试图修改orderby查询变量的做法存在根本缺陷。Order是由MySQL创建的,MySQL不懂PHP,在查询完成后无法修改。

如果要对结果进行分页,则必须通过查询执行顺序,这将需要修改通过过滤器发送到数据库的原始SQL。

如果结果没有分页,您可以使用PHP的usort:

$loop = new WP_Query( array(
    \'posts_per_page\' => -1,
    \'post_type\' => \'actors\'
) );

// sort function
function wpd_last_name_sort( $a, $b ) {
    $a_last = end(explode(\' \', $a->post_title));
    $b_last = end(explode(\' \', $b->post_title));
    return strcasecmp( $a_last, $b_last );
}

// sort posts
usort( $loop->posts, \'wpd_last_name_sort\' );

// set post object to first post in sorted list
$loop->post = $loop->posts[0];

// run the loop...
您可能还想考虑这样一种情况,即名称不仅仅是两个单词。我会亲自制作标题last name, first name 让MySQL来完成这项工作。

结束

相关推荐

更改wp_title()的输出

我使用wp\\u title生成某种面包屑,效果很好,但在那里我有网站的标题,我想删除它。看起来是这样的:分类1:城市|站点名称。我通过使用<?php wp_title(); ?>.如何删除该输出中的站点标题?