2015-11-03 3 views
1

У меня есть несколько файлов шаблонов WordPress:Wordpress для нескольких пользовательских типов почтовых

  • одного example_1.php
  • одного example_2.php
  • Archiv-example_1.php
  • Archiv-example_2 .php

Это точно такие же, они предназначены только для разных типов пользовательских типов сообщений. Из-за этого я хочу объединить их в один. Я добавил эту функцию:

add_filter('template_include', function($template) 
{ 
    $my_types = array('example_1', 'example_2'); 
    $post_type = get_post_type(); 

    if (! in_array($post_type, $my_types)) 
      return $template; 
    return get_stylesheet_directory() . '/single-example.php'; 
}); 

Это «перенаправляет» каждый отдельный архив и тот же шаблон.

Как переадресовать страницы архива только в архивные примеры и отдельные страницы в один пример?

ответ

2

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

Для архивов используйте функцию is_post_type_archive($post_types), чтобы проверить, соответствует ли текущий запрос странице архива одного из типов сообщений, которые вы хотите вернуть. Если это совпадение, верните шаблон общего архива.

Для одиночных сообщений используйте функцию is_singular($post_types), чтобы узнать, соответствует ли текущий запрос для одного сообщения одного из указанных вами типов сообщений. Если это совпадение, верните общий шаблон одиночного сообщения.

В обоих случаях вы хотите вернуть $template, если это не соответствие, если оно было изменено другим фильтром.

add_filter('template_include', function($template) { 
    // your custom post types 
    $my_types = array('example_1', 'example_2'); 

    // is the current request for an archive page of one of your post types? 
    if (is_post_type_archive( $my_types)){ 
     // if it is return the common archive template 
     return get_stylesheet_directory() . '/archive-example.php'; 
    } else 
    // is the current request for a single page of one of your post types? 
    if (is_singular($my_types)){ 
     // if it is return the common single template 
     return get_stylesheet_directory() . '/single-example.php'; 
    } else { 
     // if not a match, return the $template that was passed in 
     return $template; 
    } 
}); 
+0

Большое спасибо, это отлично объяснено! –

0

Вы хотите использовать is_post_type_archive($post_type), чтобы проверить, подан ли запрос на страницу архива или нет.

if (is_post_type_archive($post_type)) 
    return get_stylesheet_directory() . '/archive-example.php'; 
return get_stylesheet_directory() . '/single-example.php'; 
+0

Для OP: вы можете передать массив типов почтовых функции [ 'is_post_type_archive()'] (https://codex.wordpress.org/Function_Reference/is_post_type_archive). – rnevius

+0

Спасибо за это предложение. Как добавить фильтр для типов сообщений? (как я это сделал с помощью '$ my_types = array ('example_1', 'example_2');'? Я не могу этого добиться самостоятельно, было бы здорово, если вы сможете помочь мне в другой раз! –

+0

You код предполагает, что нет других типов сообщений, это может нарушиться, если бы существовал «пример_3», у которого был другой шаблон. – doublesharp