Как подключить шаблон WordPress к произвольному типу записи в папке плагина

Предположим, вы пишете плагин, который регистрирует новый тип поста WordPress. Ваш новый тип обязательно будет нуждаться в своем собственном шаблоне вывода, но шаблоны пользовательских типов записей, например single-{post_type}.php всегда находятся в папке самого шаблона.

К счастью, существует способ заставить WP привязать шаблон из папки плагина с произвольным типом записи. Сделать это можно привязавшись к фильтру single_template, как показано в примере ниже.

add_filter('single_template', 'hub_custom_post_type_template');

function hub_custom_post_type_template($single) {

    global $post;

    /* Проверяем существует ли шаблон в папке плагина и регистрируем его в качестве шаблона для типа записи */
    if ( $post->post_type == 'ВАШ ТИП ЗАПИСИ' ) {
        if ( file_exists( plugin_dir_path(__FILE__) . 'templates/template-single.php') ) {
            return plugin_dir_path(__FILE__) . 'templates/template-single.php';
        }
    }

    return $single;
}

В этом примере я воспользовался фильтром single_template, который перехватывает определение шаблона для страниц, которые удовлетворяют условию is_single в иерархии шаблона WordPress.

Как подключить шаблон к архиву для типа записи

Как и в примере выше, мы можем пользоваться фильтром для переопределения шаблона для всех или выбранного архива WordPress.

add_filter('archive_template', function($template) { 
    if ( is_post_type_archive('ВАШ ТИП ЗАПИСИ') ) {
        if ( file_exists( plugin_dir_path(__FILE__) . 'templates/template-my-archive.php') ) {
            return plugin_dir_path(__FILE__) . 'templates/template-my-archive.php';   
        }
    }
    return $template;
 });

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

add_filter('index_template', function($template) { 
    // Переопределить шаблон для index
 });

add_filter('404_template', function($template) { 
    // Переопределить шаблон для 404
 });

add_filter('archive_template', function($template) { 
    // Переопределить шаблон для archive
 });

add_filter('author_template', function($template) { 
    // Переопределить шаблон для author
 });

add_filter('category_template', function($template) { 
    // Переопределить шаблон для category
 });

add_filter('tag_template', function($template) { 
    // Переопределить шаблон для tag
 });

add_filter('taxonomy_template', function($template) { 
    // Переопределить шаблон для taxonomy
 });

add_filter('date_template', function($template) { 
    // Переопределить шаблон для date
 });

add_filter('embed_template', function($template) { 
    // Переопределить шаблон для embed
 });

add_filter('home_template', function($template) { 
    // Переопределить шаблон для home
 });

add_filter('frontpage_template', function($template) { 
    // Переопределить шаблон для frontpage
 });

add_filter('privacypolicy_template', function($template) { 
    // Переопределить шаблон для privacypolicy
 });

add_filter('page_template', function($template) { 
    // Переопределить шаблон для page
 });

add_filter('paged_template', function($template) { 
    // Переопределить шаблон для paged
 });

add_filter('search_template', function($template) { 
    // Переопределить шаблон для search
 });

add_filter('single_template', function($template) { 
    // Переопределить шаблон для single
 });

add_filter('singular_template', function($template) { 
    // Переопределить шаблон для singular
 });

add_filter('attachment_template', function($template) { 
    // Переопределить шаблон для attachment
 });

Надеюсь я помог вам разобраться в том, как можно подключить шаблон WordPress к произвольному типу записи в папке плагина.

Anatolii Koziura

Антураж-куражмонтаж в мире web разработки.

2 thoughts to “Как подключить шаблон WordPress к произвольному типу записи в папке плагина”

  1. Прочитал статью, но не смог разобраться с тем, каким образом можно изменить шаблон для страниц архива. Я пытался это сделать фильтром archive_template, но он изменяет шаблон для всех архивов, а мне нужно только для одного типа записи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *