【问题标题】:WordPress Orderby Last Word In TitleWordPress Orderby 标题中的最后一个字
【发布时间】:2013-05-01 05:45:15
【问题描述】:

我有一个“员工”的自定义帖子类型。我需要得到这个以在页面上按姓氏字母顺序显示员工。我知道一种解决方法是使用自定义元框并将名字和姓氏分成两个字段,但我试图避免这种情况,因为这看起来很老套,而且不像使用标题字段那样干净。

我有一个短代码可以显示自定义帖子类型以及请求的人员“类型”分类属性。这是一个例子:

[staff type="local"] 

我不能只是假设这是我想要的标题中的第二个单词,因为有些员工是夫妻,他们的名字都会被列为:“Bob 和 Cindy Smith”。

这是我目前拥有的简码。

function get_staff($atts) {
    extract( shortcode_atts( array( 'type' => 'international' ), $atts ) );
    $loop = new WP_Query(
        array (
            'post_type' => 'staff',
            'orderby' => 'title',
            'staff-type' => $type
        )
    );

if ($loop->have_posts()) {
    $output = '<div class="staff">';

    while($loop->have_posts()){
        $loop->the_post();
        $meta = get_post_meta(get_the_id());

        $output .= '
            <div class="staff" style="float: left; display: block; border: 1px solid #CCC; margin: 10px; padding: 12px; background-color: #eee;">
                <a href="' . get_permalink() . '">
                    ' . get_the_post_thumbnail($post->ID, 'thumbnail') . '<br />
                ' . get_the_title()  . '</a><br />
                ' . get_the_excerpt() . '
            </div>
        ';
    }
    $output .= "</div>";
} else {
    $output = 'No Staff Meet This Criteria Yet.';
}

return $output;
};

add_shortcode('staff', 'get_staff'); 

这很好用,但缺少姓氏的字母顺序。谢谢你尽你所能的帮助。这是我第一次真正尝试详细的简码,所以请具体回答一下。

【问题讨论】:

    标签: wordpress custom-post-type shortcode alphabetical


    【解决方案1】:

    试试这个。首先在functions.php中添加如下orderby filter

    function posts_orderby_lastname ($orderby_statement) 
    {
      $orderby_statement = "RIGHT(post_title, LOCATE(' ', REVERSE(post_title)) - 1) DESC";
        return $orderby_statement;
    }
    

    然后像这样在查询中使用它

    add_filter( 'posts_orderby' , 'posts_orderby_lastname' );
        $loop = new WP_Query(
            array (
                'post_type' => 'staff',
                'staff-type' => $type
            )
        );
    

    在循环之后移除过滤器

    remove_filter( 'posts_orderby' , 'posts_orderby_lastname' );
    

    【讨论】:

    • 完美运行。除了functions.php文件之外,有没有办法将第一个函数放在其他地方?我正在制作我的自定义帖子类型插件以实现可移植性,并且将来如果我的客户改变他们的主题,这将会中断。感谢您的帮助。
    • 我发现了这篇关于插件开发的文章,它展示了一个添加动作的示例plugintutorials.blogspot.com/2011/04/… - 我想你可以将它添加到你的插件文件中。
    【解决方案2】:

    上面发布的答案很棒。但是,如果列表中的人只有一个名字,就会出现问题。例如,Kanye 会出现在结果的顶部,并且不会与 Ks 一起排序。

    我已经更新了代码,这将按字母顺序排列那些只有一个名字的人以及那些有名字和姓氏的人。所以 Kanye 现在会带着 Ks 出现。

    function posts_orderby_lastname ($orderby_statement) 
    {
        $orderby_statement = "RIGHT(post_title, LOCATE(' ', CONCAT(REVERSE(post_title), ' ')) - 1) ASC";
        return $orderby_statement;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多