Автоматически выбирать шаблон для дочерней страницы с тем же именем, что и у другой

На веб-сайте WordPress у меня есть эта структура страницы:

/posts
/another-page/posts

По сути, это две разные страницы со списком разных сообщений, хотя название (сообщения) одинаковое. Две страницы должны использовать разные шаблоны. Для первой страницы «сообщений» я просто создаю файл с именем page-posts.php, и он выбирается автоматически. Как сделать то же самое для другой страницы «сообщений»?

Является ли единственным решением создать шаблон и вручную выбрать его из раскрывающегося списка на странице администратора? Нет ли способа изменить слаг, не влияя на URL-адрес?


person Carlo    schedule 15.10.2014    source источник


Ответы (2)


Вы можете создать два файла шаблона с именем page-{id}.php для каждой страницы. Это будет обрабатывать обе страницы для вас.

Раздел страницы иерархии шаблонов

Идентификаторы для каждой страницы будут уникальными. Поэтому, когда вы выбираете «Редактировать» в области WP-Admin, посмотрите на URL-адрес, и вы сможете найти идентификатор.

/wp-admin/post.php?post=6163&action=edit

Для этой страницы мой идентификатор страницы будет 6163. Таким образом, имя шаблона будет page-6163.php.

Ваше здоровье

person justindgivens    schedule 15.10.2014
comment
так что нет никакого способа продолжать делать с slug? - person Carlo; 16.10.2014
comment
были бы шаблоны другими, если бы это была родительская страница, а не дочерняя? - person justindgivens; 20.10.2014

Вы можете попробовать подключиться к действию шаблона страницы, проверить свою пользовательскую структуру URL и, если она существует, вывести свой собственный шаблон.

 add_filter( 'page_template', 'custom_page_template' );

 function custom_page_template( $page_template )  {
     $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

     if ( false !== strpos( $url, '/another-page/posts' ) ) {
         $page_template = dirname(  __FILE__  ) . '/path_to_my_template.php';
     }

     return $page_template;
 }
person Talk nerdy to me    schedule 16.10.2014