Сышышь ты, выходи сюда,
поговорим !

WordPress добавить мета бокс в категорию и другие таксономии

Опубликовано: 24.08.2018

Иногда при разработке сайта возникает необходимость добавить какие-либо данные в категрию или другие таксономии (в том числе и кастомные), для того, чтобы было удобно заполнять данные в эту категорию в админке, и также удобно было выводить эти данные на фронте. Для этого нужно добавить мета бокс в категорию и другие таксономии. Думаю, всем известно, что мета-боксы можно добавить к постам и страницам, а тут мы добавим мета бокс в категорию.


SEO оптимизация WordPress сайта для эффективного продвижения в Google и Яндекс

Как добавить мета бокс в категорию и другие таксономии?

 

Итак, добавление метабокса в категорию потребует от нас 3-х функций. Начнем с добавления формы для дополнительной информации о категории на страницу добавления новой категории:

<?php // страница добавления категории function taxonomy_add_new_meta_field() { // это добавит мета-поле на страницу добавления категории ?> <div class="form-field"> <label for="term_meta[custom_term_meta]"><?php _e( 'Демо-поле', 'htmler' ); ?></label> <input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value=""> <p class="description"><?php _e( 'Enter a value for this field','pippin' ); ?></p> </div> <?php } add_action( 'category_add_form_fields', 'taxonomy_add_new_meta_field', 10, 2 );

В самой функции нет ничего необычного: просто вывод поля для ввода, внимания заслуживает название экшена, на который мы навязываем эту функцию. Конкретно: category_add_form_fields . Вместо category здесь может быть совершенно любая таксономия, например bookauthor_add_form_fields или photoalbum_add_form_fields. То есть {taxonomy}_add_form_fields, где вместо {taxonomy} нужно подставить имя нужной таксономии.

Такс. Со страницей добавления категории разобрались. Теперь нужно добавить мета бокс в категорию и другие таксономии на страницу редактирования категории (таксономии).

<?php // старница редактирования категории function taxonomy_edit_meta_field($term) { // Получаем список текущих значений (возвращает массив) $term_meta = get_option( "taxonomy_{$term->term_id}" ); ?> <tr class="form-field"> <th scope="row" valign="top"><label for="term_meta[custom_term_meta]"><?php _e( 'Демо-поле', 'htmler' ); ?></label></th> <td> <input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value="<?php echo esc_attr( $term_meta['custom_term_meta'] ) ? esc_attr( $term_meta['custom_term_meta'] ) : ''; ?>"> <p class="description"><?php _e( 'Укажите тут значение','htmler' ); ?></p> </td> </tr> <?php } add_action( 'category_edit_form_fields', 'taxonomy_edit_meta_field', 10, 2 );

Тут всё аналогично, отличие только в том, что эта форма выведется на странице редактирования категории и в том, что в поле уже должно быть подставлено прежнее значение (мы получаем значение из базы), для этого в функцию WordPress передаёт объект таксономии $term.

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

function save_taxonomy_custom_meta( $term_id ) { if ( isset( $_POST['term_meta'] ) ) { $term_meta = get_option( "taxonomy_$term_id" ); $cat_keys = array_keys( $_POST['term_meta'] ); foreach ( $cat_keys as $key ) { if ( isset ( $_POST['term_meta'][$key] ) ) { $term_meta[$key] = $_POST['term_meta'][$key]; } } // Save the option array. update_option( "taxonomy_$term_id", $term_meta ); } } add_action( 'edited_category', 'save_taxonomy_custom_meta', 10, 2 ); add_action( 'create_category', 'save_taxonomy_custom_meta', 10, 2 );

Как видите, эту функцию мы навязываем сразу на 2 экшена, чтобы сохранять значения как формы редактирования категории, так и формы создания категории. Значения из формы мы записываем в настройки Worpdress в поле taxonomy_{id таксономии}.

Для того, чтобы на фронтенде получить эти данные для конкретной категории нужно использовать всё ту же функцию get_option:

$cat_id = get_query_var('cat'); $term_meta = get_option( "taxonomy_{$cat_id}" ); echo $term_meta['custom_term_meta'];

То есть мы получаем из массива переменных запроса query_var текущую категорию (если она существует), и с её помощью получаем нужные данные.

Редакция рекомендует лучшую по версии CMSMagazine платформу для быстрого создания интернет-магазинов – StoreLand. 7 лет успешной работы гарантируют стабильность работы вашего магазина. Создать магазин можно за считанные часы. А цена вас очень порадует (от 149 руб/мес).

Попробуйте сами: перейти на сайт

13

Понравилась или помогла статья?

Купите мне кофе
rss