В недавней статье Клаудио Симеоне он продемонстрировал, как можно добавить дополнительные столбцы к своему сообщению или пользовательский тип сообщения, экраны администратора (или удалить существующие). В этом кратком совете я основываюсь на этом, показывая вам, как сделать ваши вновь созданные столбцы сортируемыми.
Чтобы сообщить WordPress, какие столбцы вы хотите зарегистрировать как сортируемые, вам нужен этот фильтр :
1
|
manage_{$screen->id}_sortable_column
|
Для сообщений и страниц, $screen->id
равно ‘ edit-post ‘ и ‘ edit-page ‘ соответственно. Как правило, для типа записи с именем « my-post-type » это « edit-my-post-type ».
Фильтр передает массив с именами сортируемых столбцов в качестве ключей, а порядок сортировки в качестве значения. Точнее, значения определяют, какой параметр ‘ orderby
‘ установлен как в запросе, который заполняет таблицу. Точно так же, как вы можете удалять столбцы, вы также можете сделать столбцы «нестабильными», удалив их из этого массива. Давайте посмотрим на пример:
Зарегистрировать колонку
Следуя статье Клаудио , предположим, что мы добавили столбец «ломтики» к нашему типу записи «торт», что мы можем сделать следующим образом:
1
2
3
4
5
|
add_filter(‘manage_edit-cake_columns’, ‘my_extra_cake_columns’);
function my_extra_cake_columns($columns) {
$columns[‘slices’] =__(‘Slices’,’myplugindomain’);
return $columns;
}
|
И мы добавили содержимое для столбца следующим образом:
1
2
3
4
5
6
7
8
|
add_action( ‘manage_cake_posts_custom_column’, ‘my_cake_column_content’, 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
if ( ‘slices’ != $column_name )
return;
//Get number of slices from post meta
$slices = get_post_meta($post_id, ‘slices’, true);
echo intval($slices);
}
|
Я сохранил фрагменты как пост-мета, но ваши столбцы могут быть заполнены другими данными.
Сделать столбец сортируемым
Теперь мы регистрируем наш пользовательский столбец как «сортируемый». Как упоминалось выше, мы используем фильтр manage_{$screen->id}_sortable_column
. $screen->id
в этом случае — « edit-cake ».
1
2
3
4
5
6
7
8
9
|
add_filter( ‘manage_edit-cake_sortable_columns’, ‘my_sortable_cake_column’ );
function my_sortable_cake_column( $columns ) {
$columns[‘slices’] = ‘slice’;
//To make a column ‘un-sortable’ remove it from the array
//unset($columns[‘date’]);
return $columns;
}
|
Ключ массива $columns
указывает сортируемый столбец, а его значение сообщает WordPress, на что указывать ‘ orderby
‘ в запросе. Если бы это значение было одним из « orderby
», изначально понятных WordPress (к ним относятся « title
», « date
», « modified
», « comment_count
» или действительно любые другие, перечисленные в WP_Query в кодексе WordPress), мы могли бы остановите здесь. Исключением из этого правила, как и в этом примере, являются параметры ‘ meta_value
‘ и ‘ meta_value_num
‘, которые также требуют от нас установки мета-ключа.
Если мы хотим отсортировать по мета-значению или каким-либо другим способом, WordPress не понимает автоматически, вы должны сказать ему, что вы имеете в виду, упорядочив по «слайсу». Если вы делаете заказ по мета посту, самый простой способ сделать это — подключиться к действию pre_get_posts
. Это передает объект запроса, который мы можем изменить. Обратите внимание, что это действие выполняется для всех запросов по умолчанию (спереди и сзади). Хотя это вряд ли вызовет какие-либо проблемы, если только вы не хотите, чтобы WordPress интерпретировал orderby
установив для него также «slice», это хорошая идея — выполнять запросы только на стороне администратора.
01
02
03
04
05
06
07
08
09
10
11
12
|
add_action( ‘pre_get_posts’, ‘my_slice_orderby’ );
function my_slice_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( ‘orderby’);
if( ‘slice’ == $orderby ) {
$query->set(‘meta_key’,’slices’);
$query->set(‘orderby’,’meta_value_num’);
}
}
|
Это проверяет, упорядочен ли наш запрос по ‘slice’, и если это так, он сообщает WordPress о числовом упорядочении по значению мета-записи post ‘slices’. Если вы хотите отсортировать значение по алфавиту, используйте « meta_value
», а не « meta_value_num
».
$query
является объектом WP_Query
, поэтому все, что вы можете отсортировать с помощью этого объекта, позволяет сортировать столбцы. Для чего-то более сложного вам нужно подключиться к крюку posts_orderby
(или post_clauses
), но это выходит за рамки этого быстрого совета.
Примечание. Если в сообщении нет значения, сохраненного для этого метакла, то оно не будет отображаться при сортировке по этому метаключу. Это отличается от записи, в которой 0 хранится как мета-значение.