Переопределение 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>

Заметки к вопросу:
Kama 5.8 лет назад

Тебе в этом фильтре нужно вернуть значение, а не выводить его на экран! Т.е. не 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;
}
Webseodj 5.8 лет назад

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 результат обработки и вывода вышенаписанного условия?

Webseodj 5.8 лет назад
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;
}

Спасибо огромное! Работает.

Webseodj 5.8 лет назад

Еще один вопрос, если позволите: я планирую создавать различные шаблоны для разных рубрик. В некоторых необходимо включать название записи. Пример: Заголовок записи "POSTNAME" которая находится в термине 68 или 69 у таксономии news_category.

Как можно добавить название текущей записи в код: $title = "Заголовок записи которая находится в термине 68 или 69 у таксономии news_category";

Webseodj 5.8 лет назад

Разобрался. $title переименовал в $mytitle, а в return вставил:
$mytitle = 'Какой-то текст ' . $title . ' еще какой-то текст';

Еще раз спасибо!

Kama 5.8 лет назад

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

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();
oleg2983 5.1 год назад

Друзья, нужна ваша помощь. Уже всю голову сломал (( Вся надежда на вас. В общем проблема в следующем. Сделал вывод 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 подставляется инфа из последней записи которая есть в этой рубрике.