Wordpress에서 커스텀 포스트 유형의 기본 관리 정렬 순서를 커스텀 열로 설정하려면 어떻게 해야 합니까?
clientarea라고 하는 커스텀 투고 타입을 설정하고 관리 영역에 커스텀 컬럼을 몇 개 설정했습니다.커스텀 컬럼은 모두 커스텀메타필드입니다.코드에서 알 수 있습니다.기본적으로 '약속 날짜' 내림차순으로 정렬하고 싶습니다.
모든 열은 정상적으로 작동하고 예상대로 수동으로 정렬할 수 있지만 기본 정렬 순서를 가져올 수 없습니다.
기본 정렬 필드를 표준 필드(예: '제목')로 변경하면 예상대로 작동합니다. 사용자 지정 열을 기본 정렬 순서로 설정하려고 할 때만 작동하지 않습니다.순서는 동작합니다(즉, 커스텀 컬럼을 사용해도 디폴트로 asc와 desc를 변경할 수 있습니다).단, orderby는 픽업되지 않으므로 커스텀 투고가 게시된 날짜로 정렬로 돌아갑니다.
제가 무엇을 빠뜨리고 있나요?
제 코드는 다음과 같습니다.
add_action( 'manage_posts_custom_column' , 'custom_columns', 10, 2 );
function custom_columns( $column, $post_id ) {
global $wpdb;
switch ( $column ) {
case 'extranet_case_office':
$get_office_ID = get_post_meta( $post_id, 'extranet_case_office', true );
$get_office_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_office_ID);
echo $get_office_name[0]->post_title;
break;
case 'extranet_appointment_date':
echo date('d/m/Y',strtotime(get_post_meta( $post_id, 'extranet_appointment_date', true )));
break;
case 'extranet_appointment_type':
echo get_post_meta( $post_id, 'extranet_appointment_type', true );
break;
case 'extranet_insolvency_practioner':
$get_person_ID = get_post_meta( $post_id, 'extranet_insolvency_practioner', true );
$get_person_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_person_ID);
echo $get_person_name[0]->post_title;
break;
default:
break;
}
}
add_filter( 'manage_edit-clientarea_sortable_columns', 'my_sortable_clientarea_columns' );
function my_sortable_clientarea_columns( $columns ) {
$columns['extranet_case_office'] = 'extranet_sort_office';
$columns['extranet_appointment_date'] = 'extranet_sort_date';
$columns['extranet_appointment_type'] = 'extranet_sort_type';
$columns['extranet_insolvency_practioner'] = 'extranet_sort_IP';
return $columns;
}
add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( 'orderby');
switch ( $orderby ) {
case 'extranet_sort_office':
$query->set('meta_key','extranet_case_office');
$query->set('orderby','meta_value_num');
break;
case 'extranet_sort_date':
$query->set('meta_key','extranet_appointment_date');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_type':
$query->set('meta_key','extranet_appointment_type');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_IP':
$query->set('meta_key','extranet_insolvency_practioner');
$query->set('orderby','meta_value_num');
break;
default:
break;
}
}
add_action('pre_get_posts','clientarea_default_order');
function clientarea_default_order( $query ){
if( $query->get('post_type')=='clientarea' ){
if( $query->get('orderby') == '' )
$query->set('orderby','extranet_sort_date');
if( $query->get('order') == '' )
$query->set('order','desc');
}
}
문제는 이 명령어를 실행한다는 것입니다.clientarea_default_order
콜백이 너무 늦었습니다.
이 문제를 해결하려면 우선 순위를 기본 우선 순위에서 변경하면 됩니다.10
:
add_action( 'pre_get_posts','clientarea_default_order');
우선권을 가지고 있는9
:
add_action( 'pre_get_posts','clientarea_default_order', 9 );
하지만 실제로는 두 개가 필요 없어요.pre_get_posts
콜백
조합할 수 있는 것은, 다음과 같습니다.
예 #1
is_admin() && add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query )
{
// Nothing to do:
if( ! $query->is_main_query() || 'clientarea' != $query->get( 'post_type' ) )
return;
//-------------------------------------------
// Modify the 'orderby' and 'meta_key' parts
//-------------------------------------------
$orderby = $query->get( 'orderby');
switch ( $orderby )
{
case 'extranet_sort_office':
$query->set( 'meta_key', 'extranet_case_office' );
$query->set( 'orderby', 'meta_value_num' );
break;
case 'extranet_sort_date':
$query->set( 'meta_key', 'extranet_appointment_date' );
$query->set( 'orderby', 'meta_value' );
break;
case '': // <-- The default empty case
$query->set( 'meta_key', 'extranet_appointment_date' );
$query->set( 'orderby', 'meta_value' );
break;
case 'extranet_sort_type':
$query->set( 'meta_key', 'extranet_appointment_type' );
$query->set( 'orderby', 'meta_value' );
break;
case 'extranet_sort_IP':
$query->set( 'meta_key', 'extranet_insolvency_practioner' );
$query->set( 'orderby', 'meta_value_num' );
break;
default:
break;
}
}
메인 쿼리 체크와 빈 스위치 케이스를 추가했습니다.
예 #2
여기 또 다른 접근법이 있습니다.switch
부품(PHP 5.4+):
is_admin() && add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query )
{
// Nothing to do
if( ! $query->is_main_query() || 'clientarea' != $query->get( 'post_type' ) )
return;
//-------------------------------------------
// Modify the 'orderby' and 'meta_key' parts
//-------------------------------------------
$orderby = strtolower( $query->get( 'orderby') );
$mods = [
'office' => [ 'meta_key' => 'extranet_sort_office', 'orderby' => 'meta_value_num' ],
'date' => [ 'meta_key' => 'extranet_appointment_date', 'orderby' => 'meta_value' ],
'' => [ 'meta_key' => 'extranet_appointment_date', 'orderby' => 'meta_value' ],
'type' => [ 'meta_key' => 'extranet_sort_type', 'orderby' => 'meta_value_num' ],
'ip' => [ 'meta_key' => 'extranet_insolvency_practioner', 'orderby' => 'meta_value_num' ],
];
$key = 'extranet_sort_' . $orderby;
if( isset( $mods[$key] ) )
{
$query->set( 'meta_key', $mods[$key]['meta_key'] );
$query->set( 'orderby', $mods[$key]['orderby'] );
}
}
이에 대해 clientarea_default_order 액션 및 함수를 변경해 보십시오.
add_action('pre_get_posts', 'clientarea_default_order', 99);
function clientarea_default_order($query) {
if ($query->get('post_type') == 'clientarea') {
if ($query->get('orderby') == '') {
$query->set('orderby', 'extranet_sort_date');
$query->set('meta_key', 'extranet_appointment_date');
}
if ($query->get('order') == '') {
$query->set('order', 'DESC');
}
}
}
언급URL : https://stackoverflow.com/questions/31434373/in-wordpress-how-do-i-set-the-default-admin-sort-order-for-a-custom-post-type-t
'programing' 카테고리의 다른 글
application/json과 application/x-www-form-urlencoded의 차이점은 무엇입니까? (0) | 2023.02.28 |
---|---|
Spring Boot / h2-console 403과 Spring Security 1.5.2 (0) | 2023.02.28 |
잭슨 매퍼 사용에 대한 올바른 종속성 집합 (0) | 2023.02.28 |
wordpress 페이지 템플릿에 사용자 지정 css 추가 (0) | 2023.02.28 |
요청한 URL /about을 이 서버에서 찾을 수 없습니다. (0) | 2023.02.28 |