Добавляем и удаляем колонки в таблицах списков таксономий и постов

Сразу говорю, я не буду править файлы движка WordPress, все действия будут проводиться в functions.php в теме.

Таксономии

Обычно в случае с добавлениями колонок в таблицу таксономий, дело не обходится одной только функцией, доходит даже до создания ещё одной таблицы в базе данных для хранения мета таксономий.

Но не всегда, ведь например можно использовать description для хренения URL какой-нибудь картинки, описывающей таксономию, то есть можно удалить саму колонку с описанием, зато добавить другую, где вставляется то же самое описание, но только через тег или через css background-image.

Как это может выглядеть:

дополнительная колонка с картинками в списке таксономий

Вставка колонки делится на два этапа — это добавление и заполнение.

1-й этап. Добавление колонки в таблицу.

Первый вариант кода, здесь просто перечисляем все колонки, тем самым можно удалить старые и добавить новые:

function true_add_columns($my_columns) {
    $my_columns = array(
        'cb' => '<input type="checkbox" />',
        'preview' => 'Превью'
        'name' => __('Name'),
//        'description' => __('Description'),
        'slug' => __('Slug'),
        'posts' => __('Posts')
        );
    return $my_columns;
}
 
add_filter("manage_edit-{название таксономии}_columns", 'true_add_columns');

Во втором варианте просто добавляем новую, независимо от того, какие колонки уже существуют:

function true_add_columns($my_columns) {
    $preview = array( 'preview' => 'Превью' );
    $my_columns = array_slice( $my_columns, 0, 1, true ) + $preview + array_slice( $my_columns, 1, NULL, true );
    return $my_columns;
}
 
add_filter("manage_edit-{название таксономии}_columns", 'true_add_columns');

Не забудьте заменить {название таксономии} — на название таксономии, то есть category, post_tag, либо ваше собственное и без фигурных скобок!

2-й этап. Содержимое колонки.
Как я и говорил, описание таксономии будет являться URL-ом картинки.

function fill_columns($out, $column_name, $id) {
    $term = get_term($id, '{название таксономии}');
    switch ($column_name) {
        case 'preview':
            $out .= '<img src="'.$term->description.'" width="48" height="48" />'; 
            break;
        default:
            break;
    }
    return $out;
}
 
add_filter("manage_{название таксономии}_custom_column", 'fill_columns', 10, 3);

Вот ещё один пример, в нём была добавлена колонка с ID для рубрик и меток.
P.S. Ширину колонок можно настроить с помощью стилей.

Записи, типы записей

В этом случае думаю лучше всего будет создать колонку со значением какого-нибудь произвольного поля, можно конечно добавить ID записей, но об этом я уже писал.

Как и в случае с таксономиями, здесь будет два этапа:

1-й этап. Варианты добавления колонки в таблицу.
Вообще, если разбираешься в PHP, то все эти три варианта сводятся к одному.

1-й вариант:

function true_add_post_columns($my_columns){
    $my_columns['keywords'] = 'Ключевые слова';
    return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

2-й вариант:

function true_add_post_columns($my_columns){
    $keywords = array( 'keywords' => 'Ключевые слова' );
    $my_columns = array_slice( $my_columns, 0, 1, true ) + $preview + array_slice( $my_columns, 1, NULL, true );
    return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

3-й вариант, с описанием всех колонок в массиве:

function true_add_post_columns($my_columns){
    $my_columns = array(
        'title' => __('Title'),
        'categories' => __('Categories'),
        'tags' => __('Tags'),
        'comments' => '<span class="vers"><img alt="Comments" src="'.site_url().'/wp-admin/images/comment-grey-bubble.png" /></span>',
        'author' => __('Author'),
        'keywords' => 'Ключевые слова',
        'date' => __('Date')
    );
    return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

В последней строчке также замените {тип} на нужный тип записи, например post, page или что-то своё.

2-й этап. Заполнение колонки.
А здесь будет один-единственный фильтр, даже не придётся указывать тип, эта функция общая для всех.

 
function true_fill_post_columns( $column ) {
    global $post;
    switch ( $column ) {
        case 'keywords':
            echo get_post_meta($post->ID, 'seo_keywords', true);
            break;
    }
}
 
add_action( 'manage_posts_custom_column', 'true_fill_post_columns', 10, 1 );

Ну вот и всё, как вы уже наверное поняли, seo_keywords (5-я строчка) — это название произвольного поля.

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: