Intereting Posts
Разрешение пользовательского доступа к роли пользовательского типа в конце Отправка формы с использованием Ajax для запуска запроса SQL Select на основе ввода пользователем из формы Как добавить поля пользовательской формы на страницу профиля пользователя? Локальный плагин установки WordPress не загрузит изображение Как показать черновики в списке wp_dropdown_pages? Как я могу исправить это явно запутанное обновление? импортирование стороннего json-канала как пользовательский тип сообщения Запросы с текущего года Как я могу получать сообщения из всех сообщений на новостном сайте WordPress? Приращение порядка страниц при создании страниц Пользовательский тип сообщения больше не показывает код, добавленный кодом? Пользовательский тип сообщения, который ведет себя как тип сообщения комментариев Вставить тег тега функции insde Как создать тест, который вызывает is_front_page в phpunit? Функция, использующая get_posts (), при которой tax_query не работает при вызове функции functions.php

Пользовательская таксономия переписывается в постоянных ссылках для сообщений, давая 404 на страницах

Поэтому у меня есть обычная таксономия (называемая «версия») для просто сообщений, которые отлично работают. Моя проблема в том, что я хочу использовать этот налог в своих постоянных URL.com/12-3/cat/postname например URL.com/12-3/cat/postname .., который работает также отлично для сообщений, когда я использую /%version%/%category%/%postname%/ для постоянных /%version%/%category%/%postname%/ .

НО теперь каждая страница бросает мне ошибку 404. (например, URL.com/test -> 404). Если я удаляю /%version% он отлично работает .. но только для страниц .. но мне нужен налог с версией в URL-адресе для сообщений. Код ниже используется для налоговых слизней в постоянных ссылках:

 add_filter('post_link', 'version_permalink', 10, 3); function version_permalink($permalink, $post_id, $leavename) { if (strpos($permalink, '%version%') === FALSE) { return $permalink; } else { // Get post $post = get_post($post_id); if (!$post || 'page' === $post->post_type) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'version'); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) { $taxonomy_slug = $terms[0]->slug; } else { $taxonomy_slug = 'no-version'; } return str_replace('%version%', $taxonomy_slug, $permalink); } } 

Я думаю, я сделал какую-то тупую ошибку, о которой я не знаю .. Когда я посмотрел на var_dump ($ wp); он показывает мне, например (для URL.com/impressum):

 ["query_vars"]=> array(1) { ["version"]=> string(9) "impressum" } ["query_string"]=> string(17) "version=impressum" ["request"]=> string(9) "impressum" ["matched_rule"]=> string(10) "([^/]+)/?$" ["matched_query"]=> string(17) "version=impressum" ["did_permalink"]=> bool(true) 

поэтому « версия » thingy просто зарегистрирована для сообщений, а не для страниц, но ее все еще ищут … У меня нет подсказки, чтобы решить эту проблему, любая помощь или более глубокая оценка очень ценится 🙂

fyi обычная таксономия:

 add_action('init', 'version_init'); function version_init() { if (!is_taxonomy('version')) { $labels = array( 'name' => __( 'Versionen'), 'singular_name' => __( 'Version'), 'search_items' => __( 'Versionen suchen' ), 'popular_items' => __( 'Oft genutzte Versionen' ), 'all_items' => __( 'Alle Versionen' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Version bearbeiten' ), 'update_item' => __( 'Version aktualisieren' ), 'add_new_item' => __( 'Neue Version hinzufuegen' ), 'new_item_name' => __( 'Neue Version hinzufuegen' ), 'add_or_remove_items' => __( 'Version hinzufuegen oder bearbeiten' ), 'choose_from_most_used' => __( 'Die meistgenutzte Versionen aussuchen' ), 'not_found' => __( 'Keine Versionen gefunden.' ), 'menu_name' => __( 'Versionen' ), ); $rewrite = array( 'slug' => '', 'with_front' => false, 'hierarchical' => false, ); register_taxonomy( 'version', 'post', array( 'hierarchical' => TRUE, 'labels' => $labels, 'public' => TRUE, 'show_ui' => TRUE, 'show_admin_column' => TRUE, 'update_count_callback' => '_update_post_term_count', 'query_var' => 'version', 'rewrite' => $rewrite ) ); } } 

Хорошо, теперь я начал работать. Думаю, это не очень чисто, но это работает для меня.

Сначала я исправил пропавший slug в $rewrite для register_taxonomy но это не было проблемой.

  1. Поскольку я получил (и нуждаюсь) динамическое значение на первом месте, я создал пустую фиктивную родительскую страницу для своих страниц, на которой я хотел показать их. Я назвал его content . (Хорошо, я мог бы просто изменить постоянную ссылку вручную, но .. я этого не сделал)
  2. Теперь добавлено новое правило Rewrite, чтобы страницы использовали правильный query_string

.

 function funny_unicorn_rewrite_rules() { add_rewrite_rule( '^content/([^/]*)/?$', // use "content" as prefix to identify my pages 'index.php?pagename=content%2F$matches[1]', // fix the query string 'top' ); } add_action('init','funny_unicorn_rewrite_rules'); 

Чтобы выполнить эту работу, мне нужно было вернуть родительскую страницу в строку с content%2F прямо перед $matches[1]

И, естественно, я сбросил правила перезаписи после внесения изменений ..

так что единственное, что остается … он не будет работать с WPML .. когда я получу исправление для этого, а я обновлю это сообщение!

ура