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

[ad_1]
⭐
- 1 Дальнейшее чтение на SmashingMag:
- 2 Под капотом метаданных терминов
- 3 Функции метаданных
- 4 Как использовать метаданные термина
- 5 Форма продления срока действия
- 6 Обновление термина метаданными
- 7 Отображение метаданных термина в списке терминов
- 8 Удаление метаданных термина
- 9 Получение терминов по мета-значению
- 10 Вывод
Знакомство с метаданными терминов в WordPress и их использованием
Представлен 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 и их использованием
Пожалуйста оцените статью, и напишите комментарий.