WordPress. Добавляем мета-теги. Часть 2 из 3
16.08.2019
Теги: CMS • SEO • Web-разработка • WordPress • МетаДанные • МетаТеги • Плагин
На момент написания первой части, моих знаний было недостаточно, чтобы добавить мета-теги keywords
и description
для страниц списка записей. Т.е. на страницу списка записей выбранной рубрики (категории) и на на страницу списка записей с выбранной меткой (тегом). Теперь можно и продолжить — давайте создадим плагин, который добавит мета-теги для страниц рубрик и меток.
Что мы будем делать:
- Зарегистрируем два мета-поля для таксономии «Рубрики»
- Зарегистрируем два мета-поля для таксономии «Метки»
- Добавим два
textarea
для формы добавления новой рубрики - Добавим два
textarea
для формы редактирования рубрики - Добавим два
textarea
для формы добавления новой метки - Добавим два
textarea
для формы редактирования метки - Добавим в таблицу БД
wp_termmeta
две записи при добавлении новой рубрики - Обновим в таблице БД
wp_termmeta
две записи при редактировании рубрики - Добавим в таблицу БД
wp_termmeta
две записи при добавлении новой метки - Обновим в таблице БД
wp_termmeta
две записи при редактировании метки - В публичной части при показе списка записей рубрики будем добавлять на страницу мета-теги
- В публичной части при показе списка записей с меткой будем добавлять на страницу мета-теги
<?php /* Plugin Name: Добавляет мета-теги для рубрик и меток Plugin URI: https://tokmakov.msk.ru Description: Добавляет мета-теги keywords и description для рубрик и меток блога. Version: 1.0 Author: Евгений Токмаков Author URI: https://tokmakov.msk.ru */ register_activation_hook(__FILE__, function() { // проверяем права пользователя на активацию плагинов if (!current_user_can('activate_plugins')) { return; } }); register_deactivation_hook(__FILE__, function() { // проверяем права пользователя на деактивацию плагинов if (!current_user_can('deactivate_plugins')) { return; } });
/* * Регистрируем два метаполя для таксономии category и два метаполя для * таксономии post_tag, в которых будем хранить содержимое мета-тегов * keywords и description для каждой рубрики и для каждой метки */ add_action('init', function () { register_term_meta('category', 'tokmakov_meta_keywords', []); register_term_meta('category', 'tokmakov_meta_description', []); register_term_meta('post_tag', 'tokmakov_meta_keywords', []); register_term_meta('post_tag', 'tokmakov_meta_description', []); });
/* * Добавляем два textarea для формы добавления новой рубрики */ add_action('category_add_form_fields', function () { ?> <div class="form-field"> <label for="tokmakov-meta-description">Мета-тег description</label> <textarea name="tokmakov_meta_description" id="tokmakov-meta-description" rows="3" cols="40"></textarea> </div> <div class="form-field"> <label for="tokmakov-meta-keywords">Мета-тег keywords</label> <textarea name="tokmakov_meta_keywords" id="tokmakov-meta-keywords" rows="3" cols="40"></textarea> </div> <?php }); /* * Добавляем два textarea для формы редактирования существующей рубрики */ add_action('category_edit_form_fields', function ($term) { $description = get_term_meta( $term->term_id, 'tokmakov_meta_description', true ); $keywords = get_term_meta( $term->term_id, 'tokmakov_meta_keywords', true ); ?> <tr class="form-field"> <th scope="row"> <label for="tokmakov-meta-description">Мета-тег description</label> </th> <td> <textarea name="tokmakov_meta_description" id="tokmakov-meta-description" rows="3" cols="50" class="large-text"><?= esc_attr($description); ?></textarea> </td> </tr> <tr class="form-field"> <th scope="row"> <label for="tokmakov-meta-keywords">Мета-тег keywords</label> </th> <td> <textarea name="tokmakov_meta_keywords" id="tokmakov-meta-keywords" rows="3" cols="50" class="large-text"><?= esc_attr($keywords); ?></textarea> </td> </tr> <?php });
/* * Добавляем два textarea для формы добавления новой метки */ add_action('post_tag_add_form_fields', function () { ?> <div class="form-field"> <label for="tokmakov-meta-description">Мета-тег description</label> <textarea name="tokmakov_meta_description" id="tokmakov-meta-description"rows="3" cols="40"></textarea> </div> <div class="form-field"> <label for="tokmakov-meta-keywords">Мета-тег keywords</label> <textarea name="tokmakov_meta_keywords" id="tokmakov-meta-keywords" rows="3" cols="40"></textarea> </div> <?php }); /* * Добавляем два textarea для формы редактирования существующей метки */ add_action('post_tag_edit_form_fields', function ($term) { $description = get_term_meta( $term->term_id, 'tokmakov_meta_description', true ); $keywords = get_term_meta( $term->term_id, 'tokmakov_meta_keywords', true ); ?> <tr class="form-field"> <th scope="row"> <label for="tokmakov-meta-description">Мета-тег description</label> </th> <td> <textarea name="tokmakov_meta_description" id="tokmakov-meta-description" rows="3" cols="50" class="large-text"><?= esc_attr($description); ?></textarea> </td> </tr> <tr class="form-field"> <th scope="row"> <label for="tokmakov-meta-keywords">Мета-тег keywords</label> </th> <td> <textarea name="tokmakov_meta_keywords" id="tokmakov-meta-keywords" rows="3" cols="50" class="large-text"><?= esc_attr($keywords); ?></textarea> </td> </tr> <?php });
/* * Назначаем обработчики событий добавления и обновления рубрики * или метки */ add_action('create_category', 'tokmakov_save_meta_data'); add_action('edited_category', 'tokmakov_save_meta_data'); add_action('create_post_tag', 'tokmakov_save_meta_data'); add_action('edited_post_tag', 'tokmakov_save_meta_data');
/* * Сохраняем в базу данных значения мета-тегов при добавлении или * обновлении рубрики или метки */ function tokmakov_save_meta_data($term_id) { if (!current_user_can('edit_term', $term_id)) { return; } if (isset($_POST['tokmakov_meta_description'])) { $description = iconv_substr( $_POST['tokmakov_meta_description'], 0, 200 ); $description = trim($description); if (!empty($description)) { update_term_meta( $term_id, 'tokmakov_meta_description', $description ); } else { delete_term_meta( $term_id, 'tokmakov_meta_description' ); } } if (isset($_POST['tokmakov_meta_keywords'])) { $keywords = iconv_substr( $_POST['tokmakov_meta_keywords'], 0, 200 ); $keywords = trim($keywords); if (!empty($keywords)) { update_term_meta( $term_id, 'tokmakov_meta_keywords', $keywords ); } else { delete_term_meta( $term_id, 'tokmakov_meta_keywords' ); } } }
/* * Добавляем мета-теги keywords и description в публичной части сайта */ add_action( 'wp_head', function () { if (is_category() || is_tag()) { $temp = 'cat'; if (is_tag()) { $temp = 'tag_id'; } $id = get_query_var($temp); $description = get_term_meta($id, 'tokmakov_meta_description', true); if (!empty($description)) { ?> <meta name="description" content="<?= esc_attr($description); ?>" /> <?php } $keywords = get_term_meta($id, 'tokmakov_meta_keywords', true); if (!empty($keywords)) { ?> <meta name="keywords" content="<?= esc_attr($keywords); ?>" /> <?php } } }, 1 );
При удалении плагина удаляем записи из таблицы БД wp_termmeta
в файле uninstall.php
:
<?php if (!defined('WP_UNINSTALL_PLUGIN')) { exit; } global $wpdb; $query = "DELETE FROM `" . $wpdb->termmeta . "` WHERE `meta_key` IN ('tokmakov_meta_description', 'tokmakov_meta_keywords')"; $wpdb->query($query);
Дополнительно
- Функция register_term_meta()
- Хук-событие (taxonomy)_add_form_fields
- Хук-событие (taxonomy)_edit_form_fields (есть пример)
- Хук-событие create_(taxonomy)
- Хук-событие edited_(taxonomy)
- WordPress. Добавляем мета-теги. Часть 3 из 3
- WordPress. Добавляем мета-теги. Часть 1 из 3
- WordPress. Фильтр записей по произвольным полям. Часть 3 из 3
- WordPress. Фильтр записей по произвольным полям. Часть 2 из 3
- WordPress. Фильтр записей по произвольным полям. Часть 1 из 3
- WordPress. Метабоксы. Часть 2 из 2
- WordPress. Плагин «Транслитерация URL»
Поиск: CMS • SEO • Web-разработка • WordPress • Мета данные • Мета теги • Плагин