Intereting Posts
Как показать пользовательскую таксономию в постоянной ссылке? Я не могу перейти на http://novathon.cloud.reply.eu/wp-admin – всегда перенаправляется в / wp-login Плагин галереи jQuery для взаимодействия с Picasa Ошибка Ajax и ошибка 504 получить php-переменную из функций php и эхо-файл в файлах шаблонов тем Автоматический вход в систему Пользователи после регистрации и отправки подтверждения по электронной почте Проблема с extract () с пользовательским шорткодом Попытка исключить пользовательские сообщения в зависимости от даты, а сортировка по настраиваемому полю Добавить скрипт в начало из моего плагина Multisite: выполнить установку поддомена из каталога Можно ли изменить URL пользовательских типов сообщений, чтобы скрыть пул типа сообщения? Список всех сообщений в категории с функцией query_post () Есть ли PressThis, который не поддерживает хотлинк? API WordPress ограничен? Вернуть False Как изменить заголовок Open Graph для публикации мета?

add_query_vars и канонические ссылки

У меня есть две страницы, одна называется городами, а другая называется государствами. Они используют функцию add_query_vars для захвата города и / или состояния из базы данных. Страницы загружаются штрафом. Например, когда кто-то переходит к sitename.com/roller-derbies/arizona/florence/ и событиям на этом экране города. Но когда я просматриваю источник страницы и смотрю на каноническую ссылку, вставленную в wp-head, она говорит sitename.com/cities или sitename.com/states после названия страницы. Это создает проблему, когда ни одна из моих страниц не индексируется Google, поскольку все они указывают на каноническую ссылку для городов или штатов. Что я могу сделать, чтобы каноническая ссылка соответствовала URL-адресу?

Ниже приведен код, который я использую.

add_filter('query_vars', 'add_query_vars'); function add_query_vars($aVars) { $aVars[] .= 'var_state'; $aVars[] .= 'var_city'; return $aVars; } add_filter('rewrite_rules_array', 'add_rewrite_rules'); function add_rewrite_rules($aRules) { $aNewRules = array( 'roller-derbies/([^/]+)/?$' => 'index.php?pagename=states&var_state=$matches[1]', 'roller-derbies/([^/]+)/([^/]+)/?$' => 'index.php?pagename=cities&var_state=$matches[1]&var_city=$matches[2]', $aRules = $aNewRules + $aRules; return $aRules; } 

Solutions Collecting From Web of "add_query_vars и канонические ссылки"

WordPress считает, что вы находитесь на этих страницах из-за запроса pagename var в своих правилах перезаписи.

Ваше путешествие начнется в wp-includes/default-filters.php , который должен знать и любить каждый разработчик WP: именно там, где WordPress-уход использует свой собственный API-интерфейс для подключения и изменения материала.

Интерес к вашему вопросу:

 <?php add_action( 'wp_head', 'rel_canonical' ); 

Если вы посмотрите на rel-каноническую функцию в wp-includes/link-template.php вы найдете следующее:

 <?php /** * Output rel=canonical for singular queries. * * @package WordPress * @since 2.9.0 */ function rel_canonical() { if ( !is_singular() ) return; global $wp_the_query; if ( !$id = $wp_the_query->get_queried_object_id() ) return; $link = get_permalink( $id ); if ( $page = get_query_var('cpage') ) $link = get_comments_pagenum_link( $page ); echo "<link rel='canonical' href='$link' />\n"; } 

К сожалению нет фильтров для изменения ссылки. Итак, что вам нужно сделать, это wp_head то время, но до того, как wp_head , проверьте ваши запросы на vars, rel_canonical функцию и сверните свой собственный.

Первый шаг: немного переустановите перезапись:

 <?php add_action('init', 'wpse64535_add_rewrite_rules'); function wpse64535_add_rewrite_rules() { add_rewrite_rule( '^roller-derbies/([^/]+)/?$', 'index.php?pagename=states&var_state=$matches[1]', 'top' ); add_rewrite_rule( '^roller-derbies/([^/]+)/([^/]+)/?$', 'index.php?pagename=cities&var_state=$matches[1]&var_city=$matches[2]', 'top' ); } add_filter('query_vars', 'wpse64535_add_query_vars'); function wpse64535_add_query_vars($vars) { $vars[] = 'var_state'; $vars[] = 'var_city'; return $vars; } 

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

 <?php add_action('template_redirect', 'wpse64535_maybe_fix'); function wpse64535_maybe_fix() { if(get_query_var('var_state') || get_query_var('var_city')) { remove_action('wp_head', 'rel_canonical'); add_action('wp_head', 'wpse64535_fix_canonical'); } } function wpse64535_fix_canonical() { $link = home_url('roller-derbies/'); // might want to validate these before just using them? if($state = get_query_var('var_state')) $link .= "{$state}/"; if($city = get_query_var('var_city')) $link .= "{$city}/"; echo '<link rel="canonical" href="' . esc_url($link) . '" />'; } 

Все вышеперечисленное как плагин .