Загрузка шаблонов из плагина в WordPress

Я пытаюсь сделать свой первый плагин, и я застрял. Вот идея. Когда мой плагин активирован, он создаст один тип сообщения и две таксономии для этого типа сообщения (в моем случае имя типа сообщения — «Объявления»). Кроме того, я создал две шаблонные страницы: одну для отображения списка всех статей типа рекламных сообщений, а другую — для одной страницы того же типа сообщений.

Теперь моя проблема заключается в том, как сказать WordPress искать шаблоны в папке плагина, а не в папке темы, когда плагин активен. Это что-то, что я могу сделать в файле плагина, или мне нужно создать другой файл для этой цели?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
521
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно делать то, что вы ищете:

Во-первых, этот хук сообщает 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, но в целом вы помогли мне решить мою проблему. Спасибо!!!

Nikola Petrovic 27.12.2020 14:21

Вы правы с обновлениями, я не заметил множественного числа в объявлениях, которые были в вашем вопросе, извините, и для всех, кто читает, важно, чтобы использовался точный слаг пользовательского типа сообщения, иначе это не будет работать. И ваше имя шаблона архива также ближе к соглашению, поэтому лучше, чем то, которое использовалось изначально. Отредактировано, чтобы другие нашли ответ.

Tami 27.12.2020 14:59

Другие вопросы по теме