Переопределение SEO заголовков плагина Yoast в некоторых категориях
Необходимо переопределить заголовки записей некоторых таксономий по имеющемуся шаблону. Что-то вроде: такса id 69 - один шаблон, id 70 - другой.
Подскажите как можно это реализовать.
add_filter('wpseo_title', 'new_title_filter', 10 );
function myy_title_filter($title) {
if ( has_term(array('68','69'), 'news_category') ) {
echo "Тест вывода 1";
} elseif ( has_term(array('70'), 'news_category') ) {
echo "Тест вывода 2";
} else {
echo "условие не подходит";
}
return $title;
}
Пытаюсь с помощью фильтра поменять, но не получается.
add_filter('wpseo_title', 'new_title_filter', 10);
function new_title_filter($title) {
if( is_singular( 'novosti') ) {
$title = get_template_part( 'include/seo', 'title' );
}
return $title;
}
Условия проверки поместил в файл include/seo-titl.php
В итоге в исходном коде страницы: Свой SEO Title<title>Тестовая новость</title>
get_template_part() - там будет проверка на вхождение поста в определенные категории и разные шаблоны вывода заголовка (довольно большой список, поэтому вынес в отдельный файл).
<?php
if ( has_term(array('68','69'), 'news_category') ) {
echo 'Свой SEO Title 1';
} elseif ( has_term(array('70'), 'news_category') ) {
echo 'Свой SEO Title 2';
} else {
echo 'условие не подходит';
}
?>
Простите нуба, но как записать в переменную $title результат обработки и вывода вышенаписанного условия?
add_filter('wpseo_title', 'new_title_filter', 10 );
function new_title_filter($title) {
if ( is_singular() && has_term(array(68,69), 'news_category') ) {
$title = "Заголовок записи которая находится в термине 68 или 69 у таксономии news_category";
}
return $title;
}
Спасибо огромное! Работает.
Еще один вопрос, если позволите: я планирую создавать различные шаблоны для разных рубрик. В некоторых необходимо включать название записи. Пример: Заголовок записи "POSTNAME" которая находится в термине 68 или 69 у таксономии news_category.
Как можно добавить название текущей записи в код: $title = "Заголовок записи которая находится в термине 68 или 69 у таксономии news_category";
Разобрался. $title переименовал в $mytitle, а в return вставил:
$mytitle = 'Какой-то текст ' . $title . ' еще какой-то текст';
Еще раз спасибо!
Если там ожидается большая логика, то лучше не в файлы выносить её а в фукнцию и потом просто вызвать фукнцию
function my_title(){
if ( has_term(array('68','69'), 'news_category') ) {
return 'Свой SEO Title 1';
} elseif ( has_term(array('70'), 'news_category') ) {
return 'Свой SEO Title 2';
} else {
return 'условие не подходит';
}
}
и вместо
$title = "Заголовок записи которая находится в термине 68 или 69 у таксономии news_category";
юзаешь
$title = my_title();
Друзья, нужна ваша помощь. Уже всю голову сломал (( Вся надежда на вас. В общем проблема в следующем. Сделал вывод title, description, keywords через до поля, плагином ACF.
В Function вставил следующий хук:
add_action( 'wp_head', 'art_add_field_keyword', 1 );
function art_add_field_keyword() {
global $post;
$keyword_single_field = get_post_meta($post->ID, 'art_meta_title', true);
if ( $keyword_single_field ) {
if(!empty( $keyword_single_field)){
echo '<title>'. $keyword_single_field.'</title>';
}
$term_id = get_queried_object();
$keyword_cat_field = get_term_meta( $term_id->term_id, 'art_meta_title', true );
if ( $keyword_cat_field ) {
echo '<title>'.get_the_title().'</title>';
}
}
global $post;
$keyword_single_field = get_post_meta( $post->ID, 'art_meta_description', true );
if ( $keyword_single_field ) {
echo '<meta name="description" content="' . esc_html( $keyword_single_field ) . '" />';
}
$term_id = get_queried_object();
$keyword_cat_field = get_term_meta( $term_id->term_id, 'art_meta_description', true );
if ( $keyword_cat_field ) {
echo '<meta name="description" content="' . esc_html( $keyword_cat_field ) . '" />';
}
global $post;
$keyword_single_field = get_post_meta( $post->ID, 'art_meta_keywords', true );
if ( $keyword_single_field ) {
echo '<meta name="keywords" content="' . esc_html( $keyword_single_field ) . '" />';
}
$term_id = get_queried_object();
$keyword_cat_field = get_term_meta( $term_id->term_id, 'art_meta_keywords', true );
if ( $keyword_cat_field ) {
echo '<meta name="keywords" content="' . esc_html( $keyword_cat_field ) . '" />';
}
}
remove_action('wp_head', '_wp_render_title_tag',1);
Собирал сам конструкцию. На страницах и в single записях все хорошо отображается и выводится в код.
А вот в рубрики (категории) в код дублируется вывод title, description, keywords (поесть выводится мета последней записи этой рубрики и мета самой рубрики)
Вот настройки ACF
Объясните пожалуйста, что я делаю не так. Почему в рубриках дубли лезет?
Если фильтр ACF настраиваю вот так:
То дублей нет, но в title, description и keywords подставляется инфа из последней записи которая есть в этой рубрике.


Тебе в этом фильтре нужно вернуть значение, а не выводить его на экран! Т.е. не echo нужно использовать, а менять $title.
get_template_part() что там внутри, зачем так сложно? Напиши как в первом варианте:
add_filter( 'wpseo_title', 'new_title_filter', 10 ); function myy_title_filter($title) { if ( is_singular() && has_term(array(68,69), 'news_category') ) { $title = "Заголовок записи которая находится в термине 68 или 69 у таксономии news_category"; } return $title; }