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

Php 按标题第二个单词排序的帖子,php,wordpress,Php,Wordpress,这是一个常见的问题,我还没有找到一个简单的答案 我想生成一个自定义帖子类型标题的列表。我用'orderby'=>'title'让它们按字母顺序显示。标题是姓名和姓氏,我想按姓氏排序。我知道我可以创建名和姓分开的元字段,并按姓字段排序。但是我真的很想看看是否有好的方法来分解标题并将第二个单词传递给orderby 这是基本代码: <?php // Get the 'Actors' post type $args = array( 'post_type' => 'actors', 'or

这是一个常见的问题,我还没有找到一个简单的答案
我想生成一个自定义帖子类型标题的列表。我用
'orderby'=>'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();
?> 
然后更改为
'orderby'=>$lastname[1],
。但它不起作用

没有好办法使用标题中的第二个单词对帖子进行排序吗?

你不能使用循环来进行排序,WordPress没有选项

您可以拆分标题并创建一个数组:

$people = array();
while($loop->have_posts()): $loop->the_post();
    list($firstname, $lastname) = explode(" ", get_the_title() ); // You can use list, since you said that's you only first and last name on the title.
    $people[] = $lastname;
endwhile;
wp_reset_query();

sort($people); // Sort the array Asc. NOTE: You can create a function to sort by sort or rsort, on input

foreach ($people as $last) {
    echo $last, "<br />"; // echo the last name
}
$people=array();
而($loop->have_posts()):$loop->the_post();
list($firstname,$lastname)=分解(“,获取标题());//您可以使用列表,因为您说过这是标题上唯一的名字和姓氏。
$people[]=$lastname;
结束时;
wp_reset_query();
排序($people);//对数组进行Asc排序。注意:您可以创建一个函数,根据输入按排序或rsort排序
foreach($people as$last){
回显$last,“
”;//回显姓氏 }

这不是很有效率,但很有效。你应该考虑将这两个字段添加到WordPress。

< P> WordPress不允许你按这种方式排序。你必须自己获得帖子并对结果进行排序。我已经找到了这个答案,并在模拟中正常工作:

模拟:

<?php
function sort_so_10484704($a, $b)
{
    list($firstNameA, $lastNameA) = explode(" ", $a["post_title"], 2);
    list($firstNameB, $lastNameB) = explode(" ", $b["post_title"], 2);
    return strcmp($lastNameA, $lastNameB);
}

$arr = array( 
    0 => array( 'post_title' => 'Jonh Smith Lorem', 'post_content' => '1st item' ), 
    1 => array( 'post_title' => 'Abeline Zachs Ipsum', 'post_content' => '2nd item' ), 
    2 => array( 'post_title' => 'Carlos Xico Non', 'post_content' => '3rd item' ), 
    3 => array( 'post_title' => 'Kenn Tee Sequitur', 'post_content' => '4th item' ) 
);

usort($arr, "sort_so_10484704");
printf('<pre>%s</pre>', print_r($arr,true));
未经测试:

$loop=get_posts($args);
如果($loop){
usort($loop,“sort_so_10484704”);
foreach($loop as$post){
echo'
  • ID,“[0])”>“,$post->post\u title.
  • ”; } }
    检查

    <?php
    function sort_so_10484704($a, $b)
    {
        list($firstNameA, $lastNameA) = explode(" ", $a["post_title"], 2);
        list($firstNameB, $lastNameB) = explode(" ", $b["post_title"], 2);
        return strcmp($lastNameA, $lastNameB);
    }
    
    $arr = array( 
        0 => array( 'post_title' => 'Jonh Smith Lorem', 'post_content' => '1st item' ), 
        1 => array( 'post_title' => 'Abeline Zachs Ipsum', 'post_content' => '2nd item' ), 
        2 => array( 'post_title' => 'Carlos Xico Non', 'post_content' => '3rd item' ), 
        3 => array( 'post_title' => 'Kenn Tee Sequitur', 'post_content' => '4th item' ) 
    );
    
    usort($arr, "sort_so_10484704");
    printf('<pre>%s</pre>', print_r($arr,true));
    
    Array
    (
        [0] => Array
            (
                [post_title] => Jonh Smith Lorem
                [post_content] => 1st item
            )
        [1] => Array
            (
                [post_title] => Kenn Tee Sequitur
                [post_content] => 4th item
            )
        [2] => Array
            (
                [post_title] => Carlos Xico Non
                [post_content] => 3rd item
            )
        [3] => Array
            (
                [post_title] => Abeline Zachs Ipsum
                [post_content] => 2nd item
            )
    )
    
    $loop = get_posts( $args );
    if( $loop ) {
        usort($loop, "sort_so_10484704");
        foreach( $loop as $post ) {
            echo '<li><img src="' . get_post_meta($post->ID,'_dtm_small_image', [0]) . '"><span>' . $post->post_title . '</span></li>';
        }
    }