Поддержка → Проблемы и решения → Доп. описание в категориях постов
Доп. описание в категориях постов
-
Здравствуйте. Как можно сделать дополнительное описание в категориях постов, одно (то что стандартное) должно быть как описание категории, а второе СЕО (то есть как мета описание).
Так вот реализовано на одном из проектов https://gyazo.com/f125f63d49b80d63d2b604dcdfdb24fe
Но это, я так понимаю реализовано в теме конкретной, а куда подсмотреть чтобы сделать так же?
-
Проще всего поставить какой-нибудь SEO-плагин, например, Yoast. Но можно (в случае острой плагинофобии) создать (код в functions.php Темы) метаданные для рубрик и обеспечить их вывод.
Проще всего поставить какой-нибудь SEO-плагин, например, Yoast. Но можно (в случае острой плагинофобии) создать (код в functions.php Темы) метаданные для рубрик и обеспечить их вывод.
Думал про установку плагина, но уже стоит All in One Seo, не хочется все менять и перенастраивать.
Код нашел из проекта в котором реализовано данные поля в файле functions.php
add_action('init', 'register_additional_term_fields'); function register_additional_term_fields(){ new trueTaxonomyMetaBox( array( 'id' => 'txseo', // id играет роль префикса названий полей 'taxonomy' => array('category','post_tag'), // названия таксономий, для которых нужно добавить ниже перечисленные поля 'args' => array( array( 'id' => 'seo_title', // атрибуты name и id без префикса, получится "txseo_seo_title" 'title' => 'SEO Заголовок', 'type' => 'text', 'desc' => 'Укажите альтернативное название термина для SEO.', 'std' => '', // по умолчанию ), array( 'id' => 'seo_description', 'title' => 'SEO Описание', 'type' => 'text', 'desc' => 'meta тег description.', 'std' => '', // по умолчанию ) ) ) ); } add_action('wp_head', 'add_taxseo_head_meta_fields'); function add_taxseo_head_meta_fields(){ if( ! is_tax() && ! is_category() && ! is_tag() ) return; // выходим если не таксы $term = get_queried_object(); echo '<meta name="description" content="'. get_metadata('term', $term->term_id, 'txseo_seo_description', 1 ) .'">'. "\n"; }
Но как его прикрутить к новой теме, на новом проекте не понимаю, пробовал просто вставить код, но это ничего не помогло, да и плохой это вариант, а куда именно вставить и какие манипуляции после этого провести надо не понимаю совсем. Там еще и нужно будет что-то еще сделать, кроме вставки кода
уже стоит All in One Seo
что мешает в нем это настроить?
но уже стоит All in One Seo
Разве он не позволяет редактировать meta description и title?
Я не нашел галочки чтобы включить мета в категориях. Наверное это в платной версии уже разрешено
Разве он не позволяет редактировать meta description и title?
он берет meta description из описания таксономии.
а описание и description все-таки разные вещи.он берет meta description из описания таксономии.
а описание и description все-таки разные вещи.Вот. У меня сейчас, то описание что по умолчанию, выводится как мета.
он берет meta description из описания таксономии.
Фе. Выходит, Ёст таки лучше 🙂
Фе. Выходит, Ёст таки лучше 🙂
meta description платная фигня для AiOSP.
ёст, к сожалению, гораздо тормознее.я бы вообще предпочел плагин только с title и meta description — и больше ничего. эти комбайны раздражают.
Так а как добавить тот код в functions.php чтобы добавились мета описания и тайтл, а стандартные были как просто описание и название?
Первая половина кода, приведенного выше, которая добавляет поля, должна работать. А вот вторая вряд ли будет работать, ибо, судя по всему, не учитывает, что СЕО-плагин может переделать всё по-своему.
Если поля появились и введенные значения сохраняются, но не выводится на странице рубрики, надо разбираться с хуками фильтров AiOSP, если они там есть.
add_action('init', 'register_additional_term_fields'); function register_additional_term_fields(){ new trueTaxonomyMetaBox( array( 'id' => 'txseo', // id играет роль префикса названий полей 'taxonomy' => array('category','post_tag'), // названия таксономий, для которых нужно добавить ниже перечисленные поля 'args' => array( array( 'id' => 'seo_title', // атрибуты name и id без префикса, получится "txseo_seo_title" 'title' => 'SEO Заголовок', 'type' => 'text', 'desc' => 'Укажите альтернативное название термина для SEO.', 'std' => '', // по умолчанию ), array( 'id' => 'seo_description', 'title' => 'SEO Описание', 'type' => 'text', 'desc' => 'meta тег description.', 'std' => '', // по умолчанию ) ) ) ); }
после добавления этого кода появляется 500 ошибка
Наверно, потому что код не полный. Где-то должен быть определен класс trueTaxonomyMetaBox.
class trueTaxonomyMetaBox { private $opt; private $prefix; function __construct( $option ) { $this->opt = (object) $option; $this->prefix = $this->opt->id .'_'; // префикс настроек foreach( $this->opt->taxonomy as $taxonomy ){ add_action( $taxonomy . '_edit_form_fields', array( &$this, 'fill'), 10, 2 ); // хук добавления полей } // установим таблицу в $wpdb, если её нет global $wpdb; if( ! isset( $wpdb->termmeta ) ) $wpdb->termmeta = $wpdb->prefix .'termmeta'; add_action('edit_term', array( &$this, 'save'), 10, 1 ); // хук сохранения значений полей } function fill( $term, $taxonomy ){ foreach( $this->opt->args as $param ){ $def = array('id'=>'', 'title'=>'', 'type'=>'', 'desc'=>'', 'std'=>'', 'args'=>array() ); $param = (object) array_merge( $def, $param ); $meta_key = $this->prefix . $param->id; $meta_value = get_metadata('term', $term->term_id, $meta_key, true ) ?: $param->std; echo '<tr class ="form-field">'; echo '<th scope="row"><label for="'. $meta_key .'">'. $param->title .'</label></th>'; echo '<td>'; // select if( $param->type == 'wp_editor' ){ wp_editor( $meta_value, $meta_key, array( 'wpautop' => 1, 'media_buttons' => false, 'textarea_name' => $meta_key, //нужно указывать! 'textarea_rows' => 10, //'tabindex' => null, //'editor_css' => '', //'editor_class' => '', 'teeny' => 0, 'dfw' => 0, 'tinymce' => 1, 'quicktags' => 1, //'drag_drop_upload' => false ) ); } // select elseif( $param->type == 'select' ){ echo '<select name="'. $meta_key .'" id="'. $meta_key .'"> <option value="">...</option>'; foreach( $param->args as $val => $name ){ echo '<option value="'. $val .'" '. selected( $meta_value, $val, 0 ) .'>'. $name .'</option>'; } echo '</select>'; if( $param->desc ) echo '<p class="description">' . $param->desc . '</p>'; } // checkbox elseif( $param->type == 'checkbox' ){ echo ' <label> <input type="hidden" name="'. $meta_key .'" value=""> <input name="'. $meta_key .'" type="'. $param->type .'" id="'. $meta_key .'" '. checked( $meta_value, 'on', 0) .'> '. $param->desc .' </label> '; } // textarea elseif( $param->type == 'textarea' ){ echo '<textarea name="'. $meta_key .'" type="'. $param->type .'" id="'. $meta_key .'" value="'. $meta_value .'" class="large-text">'. esc_html( $meta_value ) .'</textarea>'; if( $param->desc ) echo '<p class="description">' . $param->desc . '</p>'; } // text else{ echo '<input name="'. $meta_key .'" type="'. $param->type .'" id="'. $meta_key .'" value="'. $meta_value .'" class="regular-text">'; if( $param->desc ) echo '<p class="description">' . $param->desc . '</p>'; } echo '</td>'; echo '</tr>'; } } function save( $term_id ){ foreach( $this->opt->args as $field ){ $meta_key = $this->prefix . $field['id']; if( ! isset($_POST[ $meta_key ]) ) continue; if( $meta_value = trim($_POST[ $meta_key ]) ){ update_metadata('term', $term_id, $meta_key, $meta_value, ''); } else { delete_metadata('term', $term_id, $meta_key, '', false ); } } } } add_action('init', 'register_additional_term_fields'); function register_additional_term_fields(){ new trueTaxonomyMetaBox( array( 'id' => 'txseo', // id играет роль префикса названий полей 'taxonomy' => array('category','post_tag'), // названия таксономий, для которых нужно добавить ниже перечисленные поля 'args' => array( array( 'id' => 'seo_title', // атрибуты name и id без префикса, получится "txseo_seo_title" 'title' => 'SEO Заголовок', 'type' => 'text', 'desc' => 'Укажите альтернативное название термина для SEO.', 'std' => '', // по умолчанию ), array( 'id' => 'seo_description', 'title' => 'SEO Описание', 'type' => 'text', 'desc' => 'meta тег description.', 'std' => '', // по умолчанию ) ) ) ); } add_action('wp_head', 'add_taxseo_head_meta_fields'); function add_taxseo_head_meta_fields(){ if( ! is_tax() && ! is_category() && ! is_tag() ) return; // выходим если не таксы $term = get_queried_object(); echo '<meta name="description" content="'. get_metadata('term', $term->term_id, 'txseo_seo_description', 1 ) .'">'. "\n"; } //apply_filters( 'wp_title', $title, $sep, $seplocation ); add_filter('wp_title', 'add_taxseo_wp_title', 20, 3); function add_taxseo_wp_title( $title, $sep, $seplocation ){ if( ! is_tax() && ! is_category() && ! is_tag() ) return $title; // выходим если не таксы $term = get_queried_object(); $title = get_metadata('term', $term->term_id, 'txseo_seo_title', 1 ); return esc_html( $title ); }
Установил этот код просто в файл functions.php
в итоге у меня в админ панели появились два поля https://gyazo.com/705a5cc35cb5d0eb3c939edb909964cc
А коде страницы это дело выглядит так https://gyazo.com/ea4c1b76184ca312afdfbaf343a96031
При этом стандартные также работают https://gyazo.com/5d53a8d26a2becdf8a6e39f78629bb59
И All in One Seo заменяет стандартное описание на мета описание. Каким образом это можно исправить?
Не могу найти галочку в плагине чтобы отключить замену описания в All in One Seo, может кто знает как сделать это в коде?
- Тема «Доп. описание в категориях постов» закрыта для новых ответов.