Я пытаюсь сделать свой первый плагин, и я застрял. Вот идея. Когда мой плагин активирован, он создаст один тип сообщения и две таксономии для этого типа сообщения (в моем случае имя типа сообщения — «Объявления»). Кроме того, я создал две шаблонные страницы: одну для отображения списка всех статей типа рекламных сообщений, а другую — для одной страницы того же типа сообщений.
Теперь моя проблема заключается в том, как сказать WordPress искать шаблоны в папке плагина, а не в папке темы, когда плагин активен. Это что-то, что я могу сделать в файле плагина, или мне нужно создать другой файл для этой цели?
Это должно делать то, что вы ищете:
Во-первых, этот хук сообщает WordPress, какой из шаблонов CPT является вашим единственным шаблоном CPT в вашем плагине.
Из этого ответа вы узнаете об хуке single_template и о том, как его загрузить.
Определите константу для замены «plugin_dir_path( FILE )», если вы используете ее в другом месте вашего плагина, например:
define('YOUR_PLUGIN_DIR_PATH', trailingslashit(plugin_dir_path( __FILE__ )) );
https://wordpress.stackexchange.com/questions/17385/custom-post-type-templates-from-plugin-folder
function load_single_ad_template( $template ) {
global $post;
if ( 'ads' === $post->post_type && locate_template( ['single-ads.php'] ) !== $template ) {
/*
* This is an 'ads' post
* AND a 'single ad template' is not found on
* theme or child theme directories, so load it
* from our plugin directory from inside a /templates folder.
*/
return YOUR_PLUGIN_DIR_PATH . 'templates/single-ads.php';
}
return $template;
}
add_filter( 'single_template', 'load_single_ad_template', 10, 1 );
А затем для шаблона архива объявлений хук 'archive_template', например:
function load_archive_ads_template( $archive_template ) {
global $post;
if ( is_post_type_archive ( 'ads' ) ) {
$archive_template = YOUR_PLUGIN_DIR_PATH . 'templates/archive-ads.php';
}
return $archive_template;
}
add_filter( 'archive_template', 'load_archive_ads_template', 10, 1 ) ;
Официальная документация:
https://developer.wordpress.org/reference/hooks/type_template/https://codex.wordpress.org/Plugin_API/Filter_Reference/archive_template
Это не проверено, но должно работать, однако, дайте мне знать.
Вы правы с обновлениями, я не заметил множественного числа в объявлениях, которые были в вашем вопросе, извините, и для всех, кто читает, важно, чтобы использовался точный слаг пользовательского типа сообщения, иначе это не будет работать. И ваше имя шаблона архива также ближе к соглашению, поэтому лучше, чем то, которое использовалось изначально. Отредактировано, чтобы другие нашли ответ.
Да, это работает с некоторыми настройками. Как на одиночной, так и на архивной странице должно быть написано «ads» вместо «ad», вместо «load_movie_template» должно быть «load_single_ad_template». Для именования файла архива я думаю, что лучше использовать archive-ads вместо ads-archive, но в целом вы помогли мне решить мою проблему. Спасибо!!!