Вміст Маркетинг

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

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

Цей власний тип допису, який я створив, має три важливі елементи:

  • назва – сама абревіатура.
  • Визначення – що означає абревіатура.
  • зміст – власне опис абревіатури.

У WordPress заголовок і вміст є елементами будь-якого типу публікації, тому визначення потрібно було додати за допомогою спеціального поля, яке включено через Мета Box. Однак є одна невирішена проблема, і це відображення визначення на сторінці адміністратора, де перераховані всі мої акроніми. 

У вашому файлі functions.php ви можете додати a спеціальне поле до стовпців адміністратора. У цьому випадку я роблю це лише для акроніму тип спеціального повідомлення. Ви захочете оновити текстовий домен у своєму коді для вашої теми або Дитина темі.

// 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 є CMO компанії OpenINSIGHTS і засновник Martech Zone. Дуглас допоміг десяткам успішних стартапів MarTech, допоміг у належній перевірці понад 5 мільярдів доларів у придбання та інвестиції Martech, і продовжує допомагати компаніям у впровадженні та автоматизації їхніх продажів і маркетингових стратегій. Дуглас — міжнародно визнаний експерт і спікер з цифрової трансформації та MarTech. Дуглас також є опублікованим автором посібника для чайників і книги про лідерство в бізнесі.

Статті по темі

Догори кнопки
близько

Виявлено блокування реклами

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