Intereting Posts
WP_Site_Query против WP_Network_Query в WordPress 4.6 Как получить все дочерние страницы на родительской странице? Добавить дополнительное поле в окно меню навигации? SFTP определяет в wp-config.php Как проверить, имеет ли виджетная область какие-либо виджеты? Добавление нижних колонтитулов в сообщения? Как получить ссылку профиля пользователя Buddypress и определенное поле профиля пользователя для текущего автора сообщения? Какой плагин позволит мне связать одно сообщение с другим? Есть ли опция или константа wp-config.php, которую я могу настроить, чтобы позволить мне загружать ночные / бета-сборки? Пакетное обновление значения метаполя сообщения для каждого сообщения в типе сообщения Поле поиска, которое позволяет использовать опции «Соответствовать любому ключевому слову» или «Соответствовать всем ключевым словам» Система обучения Являются ли идентификаторы сообщений уникальными для всех типов сообщений? Не показывать на главной странице. Удалить встроенный связующий инструмент

Страница запрашивается вместо пользовательской таксономии

Когда я пытаюсь получить архив для пользовательской таксономии, WP ищет страницу и ничего не находит.

Настройка

Мой код из functions.php:

add_action( 'init', 'register_store_taxonomy' ); function register_store_taxonomy() { $args = array ( 'hierarchical' => TRUE , 'label' => 'Store' , 'public' => TRUE , 'query_var' => 'store' , 'rewrite' => TRUE , 'show_in_nav_menus' => TRUE , 'show_ui' => TRUE ); register_taxonomy( 'store' , array ( 'post', 'page' ) , $args ); } 

Теперь у меня есть сообщение с тегом itunes . Щелчок по ссылке в /store/mac-store/ должен содержать список всех сообщений в этой таксономии. И это так! На локальном сервере (Win7).
Однако на промежуточном сервере (Debian с наиболее идентичными настройками) я получаю страницу 404 (и заголовок статуса 404).

Нет страниц с похожими именами или пулями, даже в корзине. Несколько раз обновлял постоянные ссылки. Нет активных плагинов. Я пробовал Google, но не нашел ничего полезного.

отладка

Я добавил следующий код в свой файл functions.php для отслеживания ошибки:

 add_action( 'wp_footer', 'dump_query' ); function dump_query() { if ( current_user_can( 'edit_posts' ) ) { pre_dump( $GLOBALS['wp_query'] ); } } function pre_dump( $var, $print = TRUE ) { $out = '<pre class="vardump">' . htmlspecialchars( var_export( $var, TRUE ) ) . '</pre>'; if ( ! $print ) return $out; print $out; } 

Вывод локального, рабочего запроса

 WP_Query::__set_state(array( 'query_vars' => array ( 'store' => 'itunes', 'error' => '', 'm' => 0, 'p' => 0, 'post_parent' => '', 'subpost' => '', 'subpost_id' => '', 'attachment' => '', 'attachment_id' => 0, 'name' => '', 'static' => '', 'pagename' => '', 'page_id' => 0, 'second' => '', 'minute' => '', 'hour' => '', 'day' => 0, 'monthnum' => 0, 'year' => 0, 'w' => 0, 'category_name' => '', 'tag' => '', 'cat' => '', 'tag_id' => '', 'author_name' => '', 'feed' => '', 'tb' => '', 'paged' => 0, 'comments_popup' => '', 'meta_key' => '', 'meta_value' => '', 'preview' => '', 's' => '', 'sentence' => '', 'fields' => '', 'category__in' => array ( ), 'category__not_in' => array ( ), 'category__and' => array ( ), 'post__in' => array ( ), 'post__not_in' => array ( ), 'tag__in' => array ( ), 'tag__not_in' => array ( ), 'tag__and' => array ( ), 'tag_slug__in' => array ( ), 'tag_slug__and' => array ( ), 'meta_query' => array ( ), 'ignore_sticky_posts' => false, 'suppress_filters' => false, 'cache_results' => true, 'update_post_term_cache' => true, 'update_post_meta_cache' => true, 'post_type' => '', 'posts_per_page' => 10, 'nopaging' => false, 'comments_per_page' => '50', 'no_found_rows' => false, 'taxonomy' => 'store', 'term' => 'itunes', 'order' => 'DESC', 'orderby' => 'wp_posts.post_date DESC', ), 'tax_query' => WP_Tax_Query::__set_state(array( 'queries' => array ( 0 => array ( 'taxonomy' => 'store', 'terms' => array ( 0 => 'itunes', ), 'include_children' => true, 'field' => 'slug', 'operator' => 'IN', ), ), 'relation' => 'AND', )), 'post_count' => 1, 'current_post' => -1, 'in_the_loop' => false, 'comment_count' => 0, 'current_comment' => -1, 'found_posts' => '1', 'max_num_pages' => 1, 'max_num_comment_pages' => 0, 'is_single' => false, 'is_preview' => false, 'is_page' => false, 'is_archive' => true, 'is_date' => false, 'is_year' => false, 'is_month' => false, 'is_day' => false, 'is_time' => false, 'is_author' => false, 'is_category' => false, 'is_tag' => false, 'is_tax' => true, 'is_search' => false, 'is_feed' => false, 'is_comment_feed' => false, 'is_trackback' => false, 'is_home' => false, 'is_404' => false, 'is_comments_popup' => false, 'is_paged' => false, 'is_admin' => false, 'is_attachment' => false, 'is_singular' => false, 'is_robots' => false, 'is_posts_page' => false, 'is_post_type_archive' => false, 'parsed_tax_query' => true, 'query' => array ( 'store' => 'itunes', ), 'request' => ' SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (135,134,133,132,131,130,129,128,125) ) AND wp_posts.post_type IN (\'post\', \'page\', \'attachment\') AND (wp_posts.post_status = \'publish\' OR wp_posts.post_author = 7 AND wp_posts.post_status = \'private\') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10', 'posts' => array ( /* cut out */), 'queried_object' => stdClass::__set_state(array( 'term_id' => '124', 'name' => 'iTunes', 'slug' => 'itunes', 'term_group' => '0', 'term_taxonomy_id' => '125', 'taxonomy' => 'store', 'description' => '', 'parent' => '0', 'count' => '1', )), 'queried_object_id' => 124, )) 

Сервер промежуточного вывода, сломанный запрос

 WP_Query::__set_state(array( 'query_vars' => array ( 'page' => 0, 'pagename' => 'itunes', 'error' => '', 'm' => 0, 'p' => 0, 'post_parent' => '', 'subpost' => '', 'subpost_id' => '', 'attachment' => '', 'attachment_id' => 0, 'name' => 'itunes', 'static' => '', 'page_id' => 0, 'second' => '', 'minute' => '', 'hour' => '', 'day' => 0, 'monthnum' => 0, 'year' => 0, 'w' => 0, 'category_name' => '', 'tag' => '', 'cat' => '', 'tag_id' => '', 'author_name' => '', 'feed' => '', 'tb' => '', 'paged' => 0, 'comments_popup' => '', 'meta_key' => '', 'meta_value' => '', 'preview' => '', 's' => '', 'sentence' => '', 'fields' => '', 'category__in' => array ( ), 'category__not_in' => array ( ), 'category__and' => array ( ), 'post__in' => array ( ), 'post__not_in' => array ( ), 'tag__in' => array ( ), 'tag__not_in' => array ( ), 'tag__and' => array ( ), 'tag_slug__in' => array ( ), 'tag_slug__and' => array ( ), 'ignore_sticky_posts' => false, 'suppress_filters' => false, 'cache_results' => true, 'update_post_term_cache' => true, 'update_post_meta_cache' => true, 'post_type' => '', 'posts_per_page' => 10, 'nopaging' => false, 'comments_per_page' => '50', 'no_found_rows' => false, 'order' => 'DESC', 'orderby' => 'wp_posts.post_date DESC', ), 'tax_query' => WP_Tax_Query::__set_state(array( 'queries' => array ( ), 'relation' => 'AND', )), 'post_count' => 0, 'current_post' => -1, 'in_the_loop' => false, 'comment_count' => 0, 'current_comment' => -1, 'found_posts' => 0, 'max_num_pages' => 0, 'max_num_comment_pages' => 0, 'is_single' => false, 'is_preview' => false, 'is_page' => false, 'is_archive' => false, 'is_date' => false, 'is_year' => false, 'is_month' => false, 'is_day' => false, 'is_time' => false, 'is_author' => false, 'is_category' => false, 'is_tag' => false, 'is_tax' => false, 'is_search' => false, 'is_feed' => false, 'is_comment_feed' => false, 'is_trackback' => false, 'is_home' => false, 'is_404' => true, 'is_comments_popup' => false, 'is_paged' => false, 'is_admin' => false, 'is_attachment' => false, 'is_singular' => false, 'is_robots' => false, 'is_posts_page' => false, 'is_post_type_archive' => false, 'parsed_tax_query' => true, 'query' => array ( 'page' => '', 'pagename' => 'store/itunes', ), 'request' => ' SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND (wp_posts.ID = \'0\') AND wp_posts.post_type = \'page\' ORDER BY wp_posts.post_date DESC ', 'posts' => array ( ), 'queried_object' => NULL, 'queried_object_id' => 0, )) 

Я чувствую, что пропущу что-то очевидное, но сейчас я потерялся.

Итак, мои вопросы: как я могу заставить WP искать архив таксономии? Почему он работает на одном сервере, но не на другом?

Обновить

Permalink установлены на /%year%/%postname%/ на обоих серверах, и я сбросил правила перезаписи для init per:

 $GLOBALS['wp_rewrite']->flush_rules(); 

Обновление 2

используя плагин Rewrite Analyzer от @ Jan Fabry, я сравнил правила моей локальной установки и промежуточного сервера. На последнем правила отсутствуют.

Переписать правила

 store/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$ store: ([^/]+) feed: (feed|rdf|rss|rss2|atom) store/([^/]+)/(feed|rdf|rss|rss2|atom)/?$ store: ([^/]+) feed: (feed|rdf|rss|rss2|atom) store/([^/]+)/page/?([0-9]{1,})/?$ store: ([^/]+) paged: ([0-9]{1,}) store/([^/]+)/?$ store: ([^/]+) 

Должен ли я добавлять правила вручную? Обычно register_taxonomy() должен это делать, не так ли?

Временное решение

Ба! Я использовал обходное решение, чтобы добавить отсутствующие правила перезаписи для functions.php:

 add_action( 'init', 'add_taxrules_manually' ); function add_taxrules_manually() { $tax = 'store'; $rewrite_rules = get_option( 'rewrite_rules' ); if ( isset ( $rewrite_rules[ $tax . '/([^/]+)/?$' ] ) ) { return; } $new_rules = array ( $tax . '/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?' . $tax . '=$matches[1]&feed=$matches[2]', $tax . '/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?' . $tax . '=$matches[1]&feed=$matches[2]', $tax . '/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?' . $tax . '=$matches[1]&paged=$matches[2]', $tax . '/([^/]+)/?$' => 'index.php?' . $tax . '=$matches[1]', ); $update = array_merge( $new_rules, $rewrite_rules ); update_option( 'rewrite_rules', $update ); } которого add_action( 'init', 'add_taxrules_manually' ); function add_taxrules_manually() { $tax = 'store'; $rewrite_rules = get_option( 'rewrite_rules' ); if ( isset ( $rewrite_rules[ $tax . '/([^/]+)/?$' ] ) ) { return; } $new_rules = array ( $tax . '/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?' . $tax . '=$matches[1]&feed=$matches[2]', $tax . '/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?' . $tax . '=$matches[1]&feed=$matches[2]', $tax . '/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?' . $tax . '=$matches[1]&paged=$matches[2]', $tax . '/([^/]+)/?$' => 'index.php?' . $tax . '=$matches[1]', ); $update = array_merge( $new_rules, $rewrite_rules ); update_option( 'rewrite_rules', $update ); } 

Важно: новые правила должны появляться перед правилами страницы. Изменение порядка аргументов в array_merge() не будет исправлено.

Вопрос все еще открыт, потому что я просто должен понять, что здесь происходит.

Solutions Collecting From Web of "Страница запрашивается вместо пользовательской таксономии"