programing

WordPress Orderby 마지막 단어 제목

magicmemo 2023. 4. 1. 09:01
반응형

WordPress Orderby 마지막 단어 제목

저는 "스태프"라는 커스텀 포스트 타입을 가지고 있습니다.이 페이지에서 직원을 성별로 알파벳 순으로 표시하도록 해야 합니다.커스텀 메타박스를 사용하여 성과 이름을 두 개의 필드로 나누는 것은 알지만, 제목 필드를 사용하는 것만큼 깔끔하지 않고 매우 해킹적인 것처럼 보이기 때문에 피하려고 합니다.

요청된 직원 "type" 분류법 속성을 가진 사용자 지정 게시 유형을 표시하는 쇼트 코드 작업이 있습니다.다음은 예를 제시하겠습니다.

[staff type="local"] 

몇몇 직원들은 커플이고 "Bob and 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'); 

이것은 잘 작동하지만 성에 의한 알파벳 순서는 누락되어 있습니다.도움을 주셔서 감사합니다.저는 처음으로 정교한 쇼트 코드를 시도하는 것이므로, 조금 더 구체적으로 답변해 주십시오.

이거 먹어봐.먼저 다음 오더바이 필터를 함수에 추가합니다.php

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' );

위의 답변은 훌륭합니다.하지만 목록에 있는 사람이 한 명의 이름만 사용한다면 문제가 있다.예를 들어 Kanye는 결과 상단에 표시되며 K로 정렬되지 않습니다.

코드를 업데이트했습니다.이것에 의해, 이름과 성을 가지는 사람 뿐만이 아니라, 이름 하나만으로 알파벳 순으로 표시됩니다.Kanye가 K와 함께 등장합니다.

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

언급URL : https://stackoverflow.com/questions/16416217/wordpress-orderby-last-word-in-title

반응형