← Повернутись до блогу

Як підключити шаблон WordPress до довільного типу запису в папці плагіна

April 2020 1 хвилина на читання 305 переглядів

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

На щастя, існує спосіб змусити WP прив’язати шаблон із папки плагіна до довільного типу запису. Зробити це можна за допомогою фільтра single_template, як показано у прикладі нижче.

php

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.

php

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;
 });

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

php

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 до довільного типу запису в папці плагіна.

2018–2025 (c) Списуй але не один в один