Intereting Posts
Обращение к неопределенной функции Получение пользовательского поля из формы контакта 7 Пользовательская таксономия и условия запроса wp_enqueue_script регистрирует скрипт, но не создает html-тег 500 Внутренняя ошибка сервера при обновлении htaccess Вставить меню в местоположение темы в зависимости от состояния входа пользователя / выхода из системы Изменение языка WordPress по умолчанию Как я могу получить эту структуру постоянных ссылок типа post? % custom_post_type% -% таксономия% -% терм-postname% Почему @import не должен использоваться для импорта родительской темы в дочернюю тему? Создание oEmbed работы над полем выдержки Перенаправить только сайт сайта WordPress Автоматически добавлять другой подпост одного и того же родителя при сохранении подпоста Как сделать определенные области доступными для редактирования? Изменение значения параметра экрана по умолчанию для элементов мультимедиа на странице (в медиатеке) Весь текст исчез (кажется, проблема с базой данных)

Кросс-пост родительская страница добавила родительскую страницу в постоянную ссылку, но дала 404

Я создал некоторые пользовательские типы сообщений с Magicfields. Мне нужно установить родительскую страницу для персонализированного типа сообщения на стандартную страницу WordPress. Понял, что с помощью этого: http://janina.tumblr.com/post/3588081423/post-parent-different-type

Но теперь родительская страница и ее родительский элемент добавляются в постоянную ссылку, а страница просмотра или новый URL-адрес возвращает 404.

Пример:

  • Пользовательские продукты типа Post light и post x-rays
  • Установите родителя страницы продуктов рентгеновских лучей на страницу волн, которая является стандартной страницей WP и имеет родителя науки
  • это создает этот URL site.com/light/science/waves/x-rays – это перерывы
  • без родителя для рентгеновских лучей, URL-адрес site.com/light/x-rays
  • с родителем типа cross post – добавляется наука / волны, а страница просмотра – 404, но если я удаляю / science / waves из URL-адреса, работает site.com/light/x-rays.

Таким образом, структура permalink не знает, как перейти от одного типа сообщения к другому. Что делает функцию get_permalink неработоспособной, что вызывает все виды головных болей.

Предложения, вопросы?

Я думаю, что вам нужно только изменить способ get_permalink создать url для cpt, игнорируя родителя.

Вы можете сделать это, добавив фильтр в 'post_type_link' а затем восстановите постоянную ссылку для продукта cpt таким же образом, в основном, просто игнорируя родителя:

 add_filter('post_type_link', 'reset_light_link', 999, 3); function reset_light_link( $post_link, $post, $leavename ) { if ( $post->post_type != 'light' || in_array($post->post_status, array('draft','pending','auto-draft')) ) return $post_link; global $wp_rewrite; $post_link = $wp_rewrite->get_extra_permastruct($post->post_type); if ( ! $leavename ) $post_link = str_replace("%$post->post_type%", $post->post_name, $post_link); return home_url( user_trailingslashit($post_link) ); } 

Код для функции reset_light_link – это просто модифицированная версия get_post_permalink , функция, используемая в ядре для генерации постоянной ссылки (и которая 'post_type_link' ), когда get_permalink вызывается для cpt.

Вот код для этой функции.