Содержание маркетинга

WordPress: как добавить сортируемый столбец для отображения настраиваемого поля на странице администратора пользовательского типа записи

Одна область Martech Zone который продолжает привлекать много трафика на мой сайт, — это моя растущая документация по сокращения продаж, маркетинга и технологий. Я продолжаю расширять список почти из 600, а также помечаю сообщения аббревиатурой, чтобы последние сообщения отображались на одной странице отображения аббревиатуры.

Этот пользовательский тип записи, который я создал, имеет три важных элемента:

  • Название – сама аббревиатура.
  • Определение - что означает аббревиатура.
  • Содержание – фактическое описание аббревиатуры.

В WordPress заголовок и контент являются элементами, включенными в любой тип записи, поэтому определение нужно было добавить через настраиваемое поле, которое было включено через Мета Box. Однако есть одна нерешенная проблема, и это отображение определения на странице администратора, где перечислены все мои сокращения. 

В вашем файле functions.php вы можете добавить пользовательское поле в ваши административные столбцы. В данном случае я делаю это только для аббревиатуры пользовательский тип сообщения. Вы захотите обновить текстовый домен в своем коде для своей темы или Ребенок теме.

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new = array();
    foreach($columns as $key => $title) {
        if ($key == 'title') // Put the Definition column after the Title column
            $new['acronym_definition'] = __( 'Definition', 'textdomain' );
        $new[$key] = $title;
    }
    return $new;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column == 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        if (!empty($definition)) {
            echo $definition;
        } else {
            echo __('No definition', 'textdomain');
        }
    }
}

Это добавит столбец в качестве первого столбца на странице администрирования. На самом деле я хотел бы, чтобы это был второй столбец, поэтому я изменил код, чтобы добавить столбец после столбца заголовка.

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new_columns = array();

    foreach($columns as $key => $value) {
        $new_columns[$key] = $value;

        if ($key === 'title') {
            $new_columns['acronym_definition'] = __('Definition', 'textdomain');
        }
    }

    return $new_columns;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column === 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        echo $definition ? $definition : __('No definition', 'textdomain');
    }
}

Теперь я могу легко перемещаться по своим аббревиатурам и просматривать их определения:

Отображение настраиваемого поля для настраиваемого типа записи в панели администратора WordPress

Это добавило столбец, но не сделало его сортируемым. Чтобы сделать его сортируемым, код может включать сортируемый элемент, а также запрос, необходимый для предварительной выборки списка:

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new_columns = array();

    foreach($columns as $key => $value) {
        $new_columns[$key] = $value;

        if ($key === 'title') {
            $new_columns['acronym_definition'] = __('Definition', 'textdomain');
        }
    }

    return $new_columns;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column === 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        echo $definition ? $definition : __('No definition', 'textdomain');
    }
}

// Make the 'Definition' column sortable
add_filter('manage_edit-acronym_sortable_columns', 'make_definition_column_sortable');
function make_definition_column_sortable($columns) {
    $columns['acronym_definition'] = 'acronym_definition';
    return $columns;
}

// Customize the query that sorts the 'Definition' column
add_action('pre_get_posts', 'sort_definition_column');
function sort_definition_column($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }

    if ($query->get('orderby') == 'acronym_definition') {
        $query->set('meta_key', 'acronym_definition');
        $query->set('orderby', 'meta_value');
    }
}

Douglas Karr

Douglas Karr является директором по маркетингу OpenINSIGHTS и основатель компании Martech Zone. Дуглас помог десяткам успешных стартапов MarTech, помог в комплексной проверке приобретений и инвестиций Martech на сумму более 5 миллиардов долларов, а также продолжает помогать компаниям во внедрении и автоматизации их стратегий продаж и маркетинга. Дуглас — международно признанный эксперт по цифровой трансформации, а также эксперт в области MarTech и спикер. Дуглас также является автором опубликованного руководства для чайников и книги по бизнес-лидерству.

Статьи по теме

Вернуться к началу кнопки
Закрыть

Adblock обнаружен

Martech Zone может предоставить вам этот контент бесплатно, потому что мы монетизируем наш сайт за счет доходов от рекламы, партнерских ссылок и спонсорства. Мы были бы признательны, если бы вы удалили блокировщик рекламы при просмотре нашего сайта.