У меня есть сайт WordPress, который использует Yoast SEO для управления канонические ссылки а также мета роботы noindex, среди прочего, с очень своеобразной конфигурацией.
По умолчанию плагин Yoast добавляет <link rel="canonical" href="...">
на каждой странице. Мне не интересно показывать каноническую ссылку на каждой статической странице (независимо от ее типа), но в некоторых типах постов: страницы а также Сообщений (не Attatchment, Категория, Архив и т. д.)
Я знаю способ запретить Yoast добавлять каноническую ссылку по умолчанию, просто добавив следующий код в functions.php: add_filter( 'wpseo_canonical', '__return_false' );
, Но что, если я просто хочу передать этот фильтр в некоторых типах записей? Или передать его на каждой странице, за исключением некоторых типов сообщений (оба подхода полезны для меня). Помощь была бы очень оценена. Любой?
ОБНОВЛЕНИЕ: правильный ответ с некоторыми незначительными исправлениями
function remove_canonical_from_post_types($url) {
$post_type = get_post_type();
if ($post_type !== 'post' && $post_type !== 'page') { // If post type is not Post nor Page, doesn't add a canonical link in any case
return false;
}
else { // It is Post or Page
if (is_category() || is_author() || is_tag() || is_archive()) { // If page is post type 'Post' we don't want to add canonical in some sub-types: Category, Author, Tag, Archive
return false;
}
return $url; // In any other case (Posts and Pages) adds a canonical link
}
}
add_filter('wpseo_canonical', 'remove_canonical_from_post_types');
Попробуйте использовать предоставленный фильтр «wpseo_canonical» и проверьте там правильный тип сообщения (и верните false там).
Что-то вроде этого:
function remove_canonical_from_post_types($url)
{
$post_type = get_post_type();
if ($post_type !== 'post' && $post_type !== 'page') {
return false;
}
return $url;
}
add_filter('wpseo_canonical', 'remove_canonical_from_post_types');
Других решений пока нет …