Java, UX, HTML, CSS, WEB-design

Знакомство с метаданными терминов в WordPress и их использованием

[ad_1]

  • Томас Майер

  • 0 Комментарии

Знакомство с метаданными терминов в WordPress и их использованием

  • 9 минут чтения

  • WordPress, Техники (WP)

Краткое резюме ↬

Представлен WordPress 4.4 термин метаданные который позволяет вам сохранять мета-значения для терминов аналогично публикации метаданных. Это долгожданное и логичное дополнение к системе WordPress. До сих пор метасистемы постов и комментариев позволяли нам добавлять произвольные данные к постам и комментариям. Это можно использовать для добавления оценок к комментариям, указания вашего настроения во время написания сообщения, прикрепления цен к сообщениям о продуктах и ​​другой информации, которая, по вашему мнению, имеет отношение к вашему контенту. Начиная с новейшей версии WordPress, метаданные теперь могут быть добавлены к терминам что позволяет нам стандартизированно создавать такие функции, как эскизы категорий по умолчанию. В этом руководстве показано, как редактировать, обновлять и извлекать эти метаданные для терминов.

Представлен WordPress 4.4 термин метаданные который позволяет вам сохранять мета-значения для терминов аналогично публикации метаданных. Это долгожданное и логичное дополнение к системе WordPress.

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

Дальнейшее чтение на SmashingMag:

  • Расширение WordPress с помощью настраиваемых типов контента
  • Как добавить настраиваемые поля в форму комментариев WordPress
  • Адаптивные изображения RICG для WordPress
  • Все, что вам нужно знать об ускоренных мобильных страницах

Под капотом метаданных терминов

Логика термина метаданные не нова, она уже используется для постов, комментариев и пользователей.

Еще после прыжка! Продолжить чтение ниже ↓

Чтобы включить метаданные для терминов, новый termmeta был введен стол. Он сохраняет комбинацию term_id, meta_key и meta_valueплюс увеличение meta_id.

Функции метаданных

Были введены четыре новые функции для обработки операций создания, чтения, обновления и удаления (CRUD) метаданных терминов:

  • add_term_meta(): добавляет метаданные
  • update_term_meta(): обновляет существующие метаданные
  • delete_term_meta(): удаляет метаданные
  • get_term_meta(): извлекает метаданные

Под капотом эти функции используют тот же код, что и соответствующие функции для пост-метаданных.

Как использовать метаданные термина

В недавнем проекте мне пришлось назначать дополнительные атрибуты неиерархическим терминам, что было отличным шансом протестировать новую функцию метаданных.

В проекте использовался пользовательский тип сообщений для представления домов. Характеристики дома (например, телевизор, диван и т. д.) были терминами в пользовательской таксономии. Редактор информации о доме хотел составить список функций на основе группы, которая не должна быть функцией сама по себе. Поэтому я решил добавить эту группу, используя метаданные термина.

Таксономия, которую я использовал, была house_featureно вы также можете использовать существующий category или post_tag таксономии, если вы хотите использовать метаданные термина с категориями сообщений или тегами.

Во-первых, я создал свою таксономию функций:

add_action('init', 'register_feature_taxonomy');

function register_feature_taxonomy() {
    $labels = array(
        'name' => _x( 'Features', 'taxonomy general name', 'my_plugin' ),
        'singular_name' => _x('Features', 'taxonomy singular name', 'my_plugin'),
        'search_items' => __('Search Feature', 'my_plugin'),
        'popular_items' => __('Common Features', 'my_plugin'),
        'all_items' => __('All Features', 'my_plugin'),
        'edit_item' => __('Edit Feature', 'my_plugin'),
        'update_item' => __('Update Feature', 'my_plugin'),
        'add_new_item' => __('Add new Feature', 'my_plugin'),
        'new_item_name' => __('New Feature:', 'my_plugin'),
        'add_or_remove_items' => __('Remove Feature', 'my_plugin'),
        'choose_from_most_used' => __('Choose from common Feature', 'my_plugin'),
        'not_found' => __('No Feature found.', 'my_plugin'),
        'menu_name' => __('Features', 'my_plugin'),
    );

    $args = array(
        'hierarchical' => false,
        'labels' => $labels,
        'show_ui' => true,
    );

    register_taxonomy('house_feature', array('houses'), $args);
}

Вы должны изменить houses post введите в последней строке тот, который вы используете, или просто для post если вы хотите протестировать новую таксономию на постах по умолчанию.

Если вы используете код из этой статьи в вашей теме functions.php файле или в плагине убедитесь, что текстовый домен my_plugin соответствует текстовому домену вашей темы или плагина. То my_plugin текстовый домен будет работать в плагине с my_plugin слизняк

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

$feature_groups = array(
    'bedroom' => __('Bedroom', 'my_plugin'),
    'living' => __('Living room', 'my_plugin'),
    'kitchen' => __('Kitchen', 'my_plugin')
);

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

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

Добавление метаданных с новым термином

Чтобы расширить форму для добавления термина, мы используем {$taxonomy}_add_form_fields крюк. Для нашего house_feature таксономия, которую он разрешает в house_feature_add_form_fields.

add_action( 'house_feature_add_form_fields', 'add_feature_group_field', 10, 2 );
function add_feature_group_field($taxonomy) {
    global $feature_groups;
    ?><div class="form-field term-group">
        <label for="featuret-group"><?php _e('Feature Group', 'my_plugin'); ?></label>
        <select class="postform" id="equipment-group" name="feature-group">
            <option value="-1"><?php _e('none', 'my_plugin'); ?></option><?php foreach ($feature_groups as $_group_key => $_group) : ?>
                <option value="<?php echo $_group_key; ?>" class=""><?php echo $_group; ?></option>
            <?php endforeach; ?>
        </select>
    </div><?php
}

Это добавляет форму выбора прямо между исходными полями формы и кнопкой отправки.

создать форму термина с полем метаданных
Форма для создания нового термина в пользовательской таксономии теперь должна выглядеть так. (Посмотреть большую версию)

Чтобы сохранить термин meta, нам нужно подключиться к действию, которое запускается при сохранении нового термина. На этот раз мы используем created_{$taxonomy} крюк.

add_action( 'created_house_feature', 'save_feature_meta', 10, 2 );

function save_feature_meta( $term_id, $tt_id ){
    if( isset( $_POST['feature-group'] ) && ’ !== $_POST['feature-group'] ){
        $group = sanitize_title( $_POST['feature-group'] );
        add_term_meta( $term_id, 'feature-group', $group, true );
    }
}

Мы получаем данные термина из $_POST массив, отправленный с формой, и сохраните его, используя новый add_term_meta() функция. Нравится add_post_meta()он принимает четыре аргумента:

  • $term_id: идентификатор термина,
  • $meta_key: мета ключ,
  • $meta_value: Значение,
  • $unique: можно ли использовать ключ только один раз; по умолчанию false.

я устанавливаю $unique в true, потому что я хочу, чтобы каждая особенность дома была указана только в одной группе.

Обновление термина метаданными

Несмотря на то, что они имеют схожие функции, добавление нового термина и обновление существующего технически отличается в WordPress. Следовательно, нам также необходимо добавить процедуру обновления.

Мы используем {$taxonomy}_edit_form_fields крючок, чтобы получить поле для группы в форме редактирования.

add_action( 'house_feature_edit_form_fields', 'edit_feature_group_field', 10, 2 );

function edit_feature_group_field( $term, $taxonomy ){

    global $feature_groups;

    // get current group
    $feature_group = get_term_meta( $term->term_id, 'feature-group', true );

    ?><tr class="form-field term-group-wrap">
        <th scope="row"><label for="feature-group"><?php _e( 'Feature Group', 'my_plugin' ); ?></label></th>
        <td><select class="postform" id="feature-group" name="feature-group">
            <option value="-1"><?php _e( 'none', 'my_plugin' ); ?></option>
            <?php foreach( $feature_groups as $_group_key => $_group ) : ?>
                <option value="<?php echo $_group_key; ?>" <?php selected( $feature_group, $_group_key ); ?>><?php echo $_group; ?></option>
            <?php endforeach; ?>
        </select></td>
    </tr><?php
}

В дополнение к форме добавления нам нужно получить существующие данные термина, используя get_term_meta() и предварительно выберите его. Эта функция имеет три аргумента:

  • $term_id: идентификатор термина,
  • $key: ключ метаданных,
  • $single: вернуть ли один результат; по умолчанию false который вернет массив.

Поскольку я ожидаю, что будет возвращено только одно значение, я установил $single к true.

Теперь нам нужно подключиться к edited_{$taxonomy} для сохранения данных.

add_action( 'edited_house_feature', 'update_feature_meta', 10, 2 );

function update_feature_meta( $term_id, $tt_id ){

    if( isset( $_POST['feature-group'] ) && ’ !== $_POST['feature-group'] ){
        $group = sanitize_title( $_POST['feature-group'] );
        update_term_meta( $term_id, 'feature-group', $group );
    }
}

Мы используем update_term_meta() чтобы перезаписать существующее значение вместо добавления нового набора метаданных.

Отображение метаданных термина в списке терминов

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

Шаблон, который вы можете использовать здесь, manage_edit-{$taxonomy}_columnsхотя это не совсем то, как определяется хук.

add_filter('manage_edit-house_feature_columns', 'add_feature_group_column' );

function add_feature_group_column( $columns ){
    $columns['feature_group'] = __( 'Group', 'my_plugin' );
    return $columns;
}

Чтобы добавить содержимое в поля столбца, вы можете использовать шаблон крючка manage_{$taxonomy}_custom_column.

add_filter('manage_house_feature_custom_column', 'add_feature_group_column_content', 10, 3 );

function add_feature_group_column_content( $content, $column_name, $term_id ){
    global $feature_groups;

    if( $column_name !== 'feature_group' ){
        return $content;
    }

    $term_id = absint( $term_id );
    $feature_group = get_term_meta( $term_id, 'feature-group', true );

    if( !empty( $feature_group ) ){
        $content .= esc_attr( $feature_groups[ $feature_group ] );
    }

    return $content;
}

Опять же, мы используем get_term_meta() чтобы получить значение, а затем просто прикрепить его к существующему содержимому. Это позволит другим разработчикам прикрепить сюда что-то еще.

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

add_filter( 'manage_edit-house_feature_sortable_columns', 'add_feature_group_column_sortable' );

function add_feature_group_column_sortable( $sortable ){
    $sortable[ 'feature_group' ] = 'feature_group';
    return $sortable;
}

Вот как может выглядеть список терминов с дополнительным столбцом для данных терминов:

список терминов с метаданными
Список терминов с таблицей метаданных. (Посмотреть большую версию)

Удаление метаданных термина

Если вы удалите термин, соответствующие метаданные также будут удалены, поэтому вам не нужно убирать за собой.

Однако, если вам нужно удалить метаданные термина, вы можете использовать delete_term_meta() функция. Он принимает до трех аргументов:

  • $term_id: идентификатор термина
  • $meta_key: мета ключ
  • $meta_value: предыдущее значение

Вам нужно только предоставить $meta_value если вы хотите удалить метаданные с определенным значением.

Получение терминов по мета-значению

Как и в случае с сообщениями, вы также можете получать термины, используя мета-значения. Установить meta_query параметр при использовании get_terms() или wp_get_object_terms().

С помощью следующего запроса я бы получил все функции в kitchen группа.

$args = array(
    'hide_empty' => false, // also retrieve terms which are not used yet
    'meta_query' => array(
        array(
           'key'       => 'feature-group',
           'value'     => 'kitchen',
           'compare'   => 'LIKE'
        )
    )
);

$terms = get_terms( 'house_feature', $args );

Синтаксис meta_query такое же, как в WP_Queryчто позволяет использовать различные операторы для compareкак NOT LIKE, EXISTSили BETWEEN.

Поскольку я использую метаданные для группировки своих терминов, было бы очень полезно вернуть результат, упорядоченный по метазначению. Однако, в отличие от WP_Queryвы не можете использовать orderby => meta_value еще и должны сортировать результаты после их получения.

Чтобы отобразить наши термины и метаданные, мы перебираем результаты и используем get_term_meta() снова.

if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    echo '<ul>';
    foreach ( $terms as $term ) {
        echo '<li>' . $term->name . ' (' . get_term_meta( $term->term_id, 'feature-group', true ) . ')' . '</li>';
    }
    echo '</ul>';
}

Вывод

Я знаю много проектов, которые уже сохраняют метаинформацию для пользовательских таксономий. Многие из них, вероятно, собираются обновить и использовать новую логику метаданных, как только WordPress 4.4 станет широко использоваться.

Последнее, что мне сейчас не хватает в дорожной карте таксономии, — это возможность устанавливать метаданные для определенного отношения термин-объект. Дайте мне знать, если вы можете относиться к этому в комментариях.

Ресурсы

  • get_terms в Кодексе WordPress
  • Обзор таксономии на make.wordpress

Фрагмент изображения: Николай Бачийский

Сокрушительная редакция
(дп, джб, мл, ог)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Знакомство с метаданными терминов в WordPress и их использованием

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

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

Ваш адрес email не будет опубликован.

Краткое описание по статье Знакомство с метаданными терминов в WordPress и их использованием

Название: Знакомство с метаданными терминов в WordPress и их использованием . Краткое описание: [ad_1] ⭐ Томас М . Дата публикации: 06.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

Кнопка «Наверх»