переписать конечную точку, не работающую на домашней странице

Я использую этот код для создания конечной точки перезаписи в пользовательском плагине:

function setup_seo_endpoing() { add_rewrite_endpoint( 'item', EP_ALL ); } add_action( 'init', 'setup_seo_endpoint'); 

Этот код запускается / получает вызов, а конечная точка работает с одной проблемой :

Если я нахожусь на домашней странице (скажем, http://example.com ), она фактически отображает правильную статическую страницу для параметров панели.

Если я попытаюсь посетить домашнюю страницу с настраиваемым набором конечных точек (например, http://example.com/item/ct588 ), WordPress отобразит список блога .

Для полноты приведенный ниже код – это то, что я использую (внутри функции), чтобы получить значение от конечной точки.

 global $wp_query; if ( isset( $wp_query->query_vars[ 'item' ] ) ) { // ... do stuff // This does not fire } 

Соответствующие примечания:

  1. Я установил для параметра Settings => Reading => Front page статическую страницу.
  2. Я установил параметр Settings => Reading => Blog page на другую страницу.
  3. Правила rewrite / query_var корректно работают на внутренних URL-адресах страницы: http://example.com/sample-page/item/ct0608/
  4. Я сохранял постоянные ссылки несколько раз

Почему список блогов отображается вместо статической домашней страницы?

Можно ли использовать пользовательские переписывающие конечные точки на главной странице? Ни одна статья, которую я нашел, на самом деле указывает, что это могло бы / работать на домашней странице.

Solutions Collecting From Web of "переписать конечную точку, не работающую на домашней странице"

Вам нужно будет использовать комбинацию add_rewrite_tag и add_rewrite_rule

 function setup_seo_endpoint() { // Ensures the $query_vars['item'] is available add_rewrite_tag( '%item%', '([^&]+)' ); // Requires flushing endpoints whenever the // front page is switched to a different page $page_on_front = get_option( 'page_on_front' ); // Match the front page and pass item value as a query var. add_rewrite_rule( '^item/([^/]*)/?', 'index.php?page_id='.$page_on_front.'&item=$matches[1]', 'top' ); // Match non-front page pages. add_rewrite_rule( '^(.*)/item/([^/]*)/?', 'index.php?pagename=$matches[1]&static=true&item=$matches[2]', 'top' ); } add_action( 'init', 'setup_seo_endpoint', 1); // http://wordpress.stackexchange.com/a/220484/52463 // In order to keep WordPress from forcing a redirect to the canonical // home page, the redirect needs to be disabled. function disable_canonical_redirect_for_front_page( $redirect ) { if ( is_page() && $front_page = get_option( 'page_on_front' ) ) { if ( is_page( $front_page ) ) { $redirect = false; } } return $redirect; } add_filter( 'redirect_canonical', 'disable_canonical_redirect_for_front_page' );