Задать вопрос
@aleksmeh
Руки и голова из "одного места"

Wordpress — add_rewrite_rule и sitemap?

Доброго дня!


Есть два `custom_post_type` => `country` и `turs`
Хочу получить по итогу для `turs` url вида **/country/russia/turs/moscow**


В итоге, получаю при помощи:
function my_add_rewrite_rules_turs() {
    	add_rewrite_tag('%turcountry%', '([^/]+)');
    	add_rewrite_tag('%turs%', '([^/]+)');
    	add_permastruct('turs', '/countries/%turcountry%/turs/%turs%', false);
    	add_rewrite_rule('^countries/([^/]+)/turs/([^/]+)/?','index.php?turcountry=$matches[1]&turs=$matches[2]','top');
    }
    add_action( 'init', 'my_add_rewrite_rules_turs' );
    
    function my_permalinks_turs($permalink, $post, $leavename) {
    	$post_id = $post->ID;
    	if($post->post_type != 'turs' || empty($permalink))
    	 	return $permalink;
    	$parent = rwmb_get_value( 'turcountry' , $post_id );
    	$parent_post = get_post( $parent );
    	$permalink = str_replace('%turcountry%', $parent_post->post_name, $permalink);
    	return $permalink;
    }
    add_filter('post_type_link', 'my_permalinks_turs', 1, 5);

Т.е. ссылки строятся нормально, всё в порядке. НО в sitemap, ссылки на `tur` ставятся такого вида **/country//turs/moscow**. Соответственно, из-за этого получаю кучу ошибок на автопостинге в соц сети и пр.
Подскажите, что может быть этому причиной?
  • Вопрос задан
  • 216 просмотров
Подписаться 3 Сложный 4 комментария
Решения вопроса 1
@aleksmeh Автор вопроса
Руки и голова из "одного места"
Вся проблема заключалась в получении значения мета поля, а именно:
$parent = rwmb_get_value( 'turcountry' , $post_id );

Я использовал rwmb_get_value(), плагина metabox io, которым собственно и передавал это значение. Так как я глупый и не могу понять почему, НО сам факт - rwmb_get_value - "не тянуло" и после того как я заменил его на get_post_meta() (подробнее тут), все проблемы ранее озвученные мной ушли. Т.е. sitemap строится нормально, автопостинг работает нормально.

Много букв, что бы гугл это нашёл. Всем добра! Полный код, рабочий, у меня, хотя возможно это и костыль или даже порно, носам факт

function my_add_rewrite_rules_turs() {
	add_rewrite_tag('%turs%', '([^/]+)','turs=');
	add_permastruct('turs', '/countries/%countries%/turs/%turs%', false);
	add_rewrite_rule('^countries/([^/]+)/turs/([^/]+)/?','index.php?turs=$matches[2]','top');
}
add_action( 'init', 'my_add_rewrite_rules_turs' );

function my_permalinks_turs($permalink, $post, $leavename) {
	$post_id = $post->ID;
	if($post->post_type != 'turs' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
	 	return $permalink;
	$parent = get_post_meta( $post_id, 'turcountry' , true );
	$parent_post = get_post( $parent );
	$permalink = str_replace('%countries%', $parent_post->post_name, $permalink);
	return $permalink;
}
add_filter('post_type_link', 'my_permalinks_turs', 10, 3);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы