Дочерний CPT WordPress отображает 404 после реализации пользовательских правил перезаписиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Дочерний CPT WordPress отображает 404 после реализации пользовательских правил перезаписи

Сообщение Anonymous »

Для этого мне нужна очень специфическая структура URL. На веб-сайте перечислены врачи, и каждый врач находится в разделе веб-сайт.com/practitioner/doctor-name
Врач является квалификационным врачом.
Сложность заключается в том, что у каждого врача есть 3 «внутренние страницы», и они должны иметь следующий URL-адрес (уникальный для каждого врача):
website.com/practitioner/doctor-name/inner-page-title.

Кроме того, они будут иметь тот же верхний и нижний колонтитул, что и врач. (то есть с той же информацией, что и контакты и т. д.)

Вот код:

Код: Выделить всё

add_action( 'init', 'doctor_type_cpt' );
function doctor_type_cpt() {
$labels = array(
'name'                  => 'Doctors',
'singular_name'         => 'Doctor',
'menu_name'             => 'Doctors',
'name_admin_bar'        => 'Doctor',
'all_items'             => 'All Doctors',
'add_new_item'          => 'Add New Doctor',
'add_new'               => 'New Doctor',
'edit_item'             => 'Edit Doctor',
'update_item'           => 'Update Doctor',
'view_item'             => 'View Doctor',
'view_items'            => 'View Doctors',
'search_items'          => 'Search doctors',
'not_found'             => 'No records available!',
'not_found_in_trash'    => 'No records found in Trash!',
'featured_image'        => 'Doctor Image',
'set_featured_image'    => 'Set doctor image',
'remove_featured_image' =>'Remove doctor image',
'use_featured_image'    => 'Use as doctor image',
);

$args = array(
'label'             => 'Doctor',
'labels'            => $labels,
'menu_icon'         => 'dashicons-businessman', //dashicons-plus
'description'       => 'Doctors information pages.',
'hierarchical'          => true,
'public'            => true,
'menu_position'     => 20,
'supports'          => array( 'title', 'editor', 'thumbnail', 'page-attributes', 'custom-fields' ),
'show_ui'           => true,
'show_in_menu'      => true,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export'        => true,
'register_meta_box_cb' => 'add_doctor_metaboxes',
'rewrite'           => array('slug' => 'practitioner')
);
register_post_type( 'Doctor', $args);

$labels = array(
'name'                  => 'Doctor Inner Pages',
'singular_name'         => 'Doctor Inner Page',
'menu_name'             => 'Doctor Inner Pages',
'name_admin_bar'        => 'Doctor Inner Pages'
);
$args = array(
'label'                 => 'Doctor Inner Pages',
'labels'                => $labels,
'hierarchical'          => false,
'show_in_menu'  =>  'edit.php?post_type=doctor',
'public'                => true,
'rewrite'           => array('slug' => '/')
);
register_post_type( 'inner_page', $args );

}
Затем я воспользовался этим руководством, чтобы реализовать желаемую структуру URL-адресов. Вот мой код:

Код: Выделить всё

function my_add_meta_boxes() {
add_meta_box( 'page-parent', 'Page Parent', 'inner_attributes_meta_box', 'inner_page', 'side', 'high' );
}
add_action( 'add_meta_boxes', 'my_add_meta_boxes' );
function inner_attributes_meta_box( $post ) {
$post_type_object = get_post_type_object( $post->post_type );
$pages = wp_dropdown_pages( array( 'post_type' => 'doctor', 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __( '(no parent)' ), 'sort_column'=> 'menu_order, post_title', 'echo' => 0 ) );
if ( ! empty( $pages ) ) {
echo $pages;
}
}

function my_add_rewrite_rules() {
add_rewrite_tag('%inner_page%', '([^/]+)', 'inner_page=');
add_permastruct('inner_page', 'practitioner/%doctor%/%inner_page%', false);
add_rewrite_rule('^inner_page/([^/]+)/([^/]+)/?','index.php?inner_page=$matches[2]','top');
}
add_action( 'init', 'my_add_rewrite_rules' );

function my_permalinks($permalink, $post, $leavename) {
$post_id = $post->ID;
if($post->post_type != 'inner_page' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$parent = $post->post_parent;
$parent_post = get_post( $parent );
$permalink = str_replace('%doctor%', $parent_post->post_name, $permalink);
return $permalink;
}
add_filter('post_type_link', 'my_permalinks', 10, 3);
Я могу прекрасно создать экземпляр доктора, URL-адреса заполняются, но когда я создаю внутреннюю страницу и назначаю ей родительский элемент, это не работает. (Это также не работает без родителя). Все, что он делает, это перенаправляет меня на 404.

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

РЕДАКТИРОВАТЬ: я отключил все, что касается дочерних родительских элементов и изменений ссылок, но cpt внутренней страницы все еще выдает 404.

Редактировать 2: я отключил перезапись, и все заработало. Затем, когда я снова включил его, он продолжал работать, но как только я меняю постоянную ссылку на нужную структуру, он снова выдает мне ошибку 404.

Подробнее здесь: https://stackoverflow.com/questions/549 ... rite-rules
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Правило перезаписи для страницы и CPT возвращает 404
    Anonymous » » в форуме Php
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Правила перезаписи .htaccess 301 для правил автоматической перезаписи с подстановочными знаками
    Anonymous » » в форуме Apache
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • WordPress — Как правильно выполнить собственный запрос к cpt в Elementor
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Нумерация страниц Wordpress CPT перенаправляется в корень
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как добавить 2 разные таксономии в структуру постоянных ссылок Wordpress CPT
    Anonymous » » в форуме Php
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»