WordPress пользовательская сортировка столбцов не работает в первый раз

В WordPress я добавил столбцы «Количество сообщений» и «Количество средств массовой информации» на странице списка «Тег». Колонка добавлена ​​нормально. Но сортировка не работает при первом клике.

На второй раз нажмите дальше, он начинает работать нормально. Но тогда «сортировочная стрелка» показывает неправильное направление. Может кто-нибудь сказать мне. Почему сортировка в первый раз не работает? Если кто-то сталкивается с такой же проблемой, пожалуйста, дайте мне знать. Было бы здорово помочь.

Спасибо

Вот код:

add_filter('manage_posts_columns', array($this, 'addCustomColumn'));
add_action('manage_post_tag_custom_column', array($this,'post_count_column'), 3, 3);
add_action('manage_post_tag_custom_column', array($this,'media_count_column'), 4, 3);
add_filter('manage_edit-post_sortable_columns', array($this,'post_column_register_sortable') );
add_action('pre_get_posts', array($this,'post_exclusive_orderby' ));function addCustomColumn($postsColumns){
$postsColumns = array_merge( $postsColumns,
array('exclusive' => __('Exclusive')) );
$postsColumns = array_merge( $postsColumns,
array('wtf_tag' => __('Tags')) );
$postsColumns = array_merge( $postsColumns,
array('post_count' => __('Post Count')) );
$postsColumns = array_merge( $postsColumns,
array('media_count' => __('Media Count')) );

$postsColumns = $this->replaceColumn('tags','wtf_tag',$postsColumns);
return $postsColumns;
}

function post_count_column($value, $column_name, $id) {

if( $column_name == 'post_count' ) {
global $wpdb;

$term = get_tag($id);
$tag = urlencode($term->name);

$qry = "SELECT COUNT(*) as post_count FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy
ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_type = 'post'
AND $wpdb->term_taxonomy.term_id = {$id};";

$res = $wpdb->get_row($qry, ARRAY_A);

echo '<a href="'.site_url().'/wp-admin/edit.php?tag='.$tag.'">'.$res['post_count'].'</a>';
}
}

function media_count_column($value, $column_name, $id) {

if( $column_name == 'media_count' ) {
global $wpdb;

$term = get_tag($id);
$tag = urlencode($term->name);

$qry = "SELECT COUNT(*) as media_count FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy
ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_type = 'attachment'
AND $wpdb->term_taxonomy.term_id = {$id};";

$res = $wpdb->get_row($qry, ARRAY_A);

echo '<a href="'.site_url().'/wp-admin/upload.php?tag='.$tag.'&post_type=attachment">'.$res['media_count'].'</a>';
}
}

function post_column_register_sortable($columns){
$columns['post_count'] = 'post_count';
$columns['media_count'] = 'media_count';
return $columns;
}

function post_exclusive_orderby( $query ) {
if( ! is_admin() )
return;

$orderby = $query->get( 'orderby');
if( 'exclusive' == $orderby ) {
$query->set('orderby','meta_value');
$metaQuery = array(
'relation'=>'or',
array(
'key'     => 'is-exclusive-post',
'compare' => 'NOT EXISTS',
),
array(
'key'     => 'is-exclusive-post',
'value'   => array( 0, 1 ),
'compare' => 'IN'
)
);
$query->set('meta_query',$metaQuery);
}
elseif( 'media_count' == $orderby ) {
$query->set('meta_key','media_count');
$query->set('orderby','meta_value_num');
}
elseif( 'post_count' == $orderby ) {
$query->set('meta_key','post_count');
$query->set('orderby','meta_value_num');
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector