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