Переопределение 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() что там внутри, зачем так сложно? Напиши как в первом варианте: