programing

워드프레스:사용자 지정 게시 유형 열별 기본 정렬

linuxpc 2023. 4. 1. 08:31
반응형

워드프레스:사용자 지정 게시 유형 열별 기본 정렬

연락처라는 커스텀 포스트 타입이 있으며 이름, 성, 전화번호 등의 커스텀 필드가 있습니다.

관리 섹션에서는 시간순으로 정렬되지만 기본적으로 성별로 정렬해야 합니다.

여기 있는 다른 모든 솔루션을 읽었는데, 다음과 같은 솔루션이 모두 작동하지 않습니다.

function set_post_order_in_admin( $wp_query ) {
global $pagenow;
  if ( is_admin() && 'edit.php' == $pagenow && !isset($_GET['orderby'])) {
    $wp_query->set( 'orderby', 'surname' );
    $wp_query->set( 'order', 'ASC' );
  }
}
add_filter('pre_get_posts', 'set_post_order_in_admin' );

그러나 어떤 필드를 기준으로 정렬을 시도해도 ASC/DESC를 전환하면 시간순으로 역순으로 바뀌는 것 외에는 아무것도 변경되지 않습니다.

내가 뭘 잘못하고 있지?

아래의 솔루션을 참조해 주세요.

function wpa84258_admin_posts_sort_last_name( $query ){
    global $pagenow;
    if( is_admin()
        && 'edit.php' == $pagenow
        && !isset( $_GET['orderby'] )
        && !isset( $_GET['post_type'] ) ){
            $query->set( 'meta_key', 'last_name' );
            $query->set( 'orderby', 'meta_value' );
            $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'wpa84258_admin_posts_sort_last_name' );

또는 이 솔루션을 참조해 주십시오.

교체하다

 $wp_query->set( 'orderby', 'surname' );
 $wp_query->set( 'order', 'ASC' );

와 함께

$query->set( 'meta_key', 'surname' ); // name of your post meta key
$query->set( 'orderby',  'meta_value'); // meta_value since it is a string

도움이 될지도 몰라

저는 Drupal 개발자로 WordPress를 가지고 놀 기회가 없었습니다.우리는 같은 문제가 있었고 이렇게 고쳤다.

커스텀 콘텐츠유형 데이터(WP 기본 API 또는 커스텀쿼리)를 가져옵니다.이 데이터는 오브젝트 배열입니다.아래 함수를 사용하여 정렬합니다.정렬된 게시물의 배열을 반환합니다.확실하지 않습니다. 워드프레스에서 구현해야 하는 후크입니다.

/**
 *  Function to sort array by key
 *  sortArrayByKey($yourArray,"name",true); //String sort (ascending order)
 *  sortArrayByKey($yourArray,"name",true,false); //String sort (descending order)
 *  sortArrayByKey($yourArray,"id"); //number sort (ascending order)
 *  sortArrayByKey($yourArray,"count",false,false); //number sort (descending order)
 */

function sortArrayByKey(&$array, $key, $string = false, $asc = true)
{
    if ($string) {
        usort($array, function ($a, $b) use (&$key, &$asc) {
            if ($asc) return strcmp(strtolower($a{$key}), strtolower($b{$key}));
            else        return strcmp(strtolower($b{$key}), strtolower($a{$key}));
        });
    } else {
        usort($array, function ($a, $b) use (&$key, &$asc) {
            if ($a[$key] == $b{$key}) {
                return 0;
            }
            if ($asc) return ($a{$key} < $b{$key}) ? -1 : 1;
            else     return ($a{$key} > $b{$key}) ? -1 : 1;

        });
    }
}

그리고 후크에서 이 함수를 호출할 수 있습니다.

 return $this->sortArrayByKey($posts, "surname");

이 답변에서 복사한 함수: https://stackoverflow.com/a/39872303/3086531

이 스니펫에서는 Woocommerce 제품의 기본 정렬 순서(오름차순)로 '이름' 열을 설정합니다.

function sort_woocommerce_products_by_name( $query ){
    global $pagenow;
    if( is_admin()
        && 'edit.php' == $pagenow
        && isset($_GET['post_type']) && $_GET['post_type']=='product'
        && !isset( $_GET['orderby'] ) ){
            $query->set( 'orderby', 'title' );
            $query->set( 'order', 'asc' );
    }
}
add_action( 'pre_get_posts', 'sort_woocommerce_products_by_name' );

언급URL : https://stackoverflow.com/questions/38721401/wordpress-default-sorting-by-column-of-custom-post-type

반응형