Добавление своей ссылки в sitemap страниц Yoast SEO

Недавно я обнаружил забавный баг в популярном плагине Yoast SEO, который заключается в невозможности включить в sitemap ссылку на архив записей в случае, если сами записи запрещены к индексации.

Yoast признала ошибку 2 года назад, но до сих пор ничего не изменилось. Это достаточно странно тем, что WordPress уже давно используется не только как блог, и множество даже официальных тем создают собственные типы записей для чисто утилитарных целей, таких как хранение логотипов партнеров или преимуществ продукта. Такие типы записей обычно исключаются из индекса и не включаются в sitemap, но существует опция, позволяющая оставлять оставлять видимыми их архивы. Только она не работает 🙂

Ну да ладно, это же WordPress. С помощью небольшого сниппета можно исправить это недоразумение и получить нужную ссылку внутри page-sitemap.xml (сайтмап страниц сайта), с датой обновления равной дате изменения последней записи выбранного типа постов.

Просто добавьте следующий код в functions.php вашей темы или внутрь плагина, отвечающего за логику сайта:

add_filter( 'wpseo_sitemap_page_content', 'add_archive_URL' );

/**
 * Adds an archive link into page-sitemap.xml (for selected post type)
 *
 * @see https://github.com/Yoast/wordpress-seo/issues/11391
 * @return string
 */
function add_archive_URL() {

	$post_type = 'partners';
	$archive_url = get_post_type_archive_link( $post_type );

	$args      = [
		'posts_per_page'         => 1,
		'post_type'              => $post_type,
		'orderby'                => 'modified',
		'order'                  => 'DESC',
		'no_found_rows'          => true,
		'update_post_meta_cache' => false,
		'update_post_term_cache' => false,
		'fields'                 => 'ids',
		'cache_results'          => true
	];

	$latest = new WP_Query( $args );

	while ( $latest->have_posts() ) {
	     $latest->the_post();
             $date = get_post_modified_time( 'Y-m-d h:i:s', true );
             $last_mod = YoastSEO()->helpers->date->format( $date );
	}

	$url = "\t<url>\n";
	$url .= "\t\t<loc>$archive_url</loc>\n";
	$url .= "\t\t<lastmod>$last_mod</lastmod>\n";
	$url .= "\t</url>\n";

	return $url;

}

Спасибо Михаилу за подсказку нужного хука и GermanWiki за правки по коду . Официальный сайт Yoast SEO не очень-то помогает в этом вопросе.

Павел Федоров

Создатель этого сайта и многих других (на WordPress, конечно же). Любит WordPress и делает на нем всякие сумасшедшие сложные штуки, которые никто в здравом уме делать не станет. Умеет работать на фрилансе, в офисе, без офиса, без оглядки и без сна. Один из немногих участников программы FSA/FLEX, кого выдворили из Америки за плохое поведение. С тех пор умеет слушать. Обожает Star Wars, Ведьмака, горные лыжи, байдарку, пешие прогулки, спонтанные путешествия и хорошую компанию. Больше не боится vim.

1 комментарий к “Добавление своей ссылки в sitemap страниц Yoast SEO”

Добавить комментарий

%d такие блоггеры, как: