Как включить файл с помощью get_template_part () в плагин?

Очень простой вопрос может быть, но я борюсь. В разработке темы я много раз работал с get_template_part() , и я понимаю ее основы. Но когда я разрабатываю плагин, я задавался вопросом, как использовать его, показывая мне некоторые ошибки:

Примечание: использование неопределенной константы STYLESHEETPATH – предполагаемый «STYLESHEETPATH» в ...\wp-includes\template.php в строке 407

а также

Примечание: использование неопределенной константы TEMPLATEPATH – предполагаемый «TEMPLATEPATH» в ...\wp-includes\template.php в строке 410

В результате проблемы возникла проблема с поддержкой:

  • Используйте get_template_part() в плагине – Поддержка WordPress

Но это кажется огромным обходным решением – я сомневаюсь. Я думаю, что это не должно быть сложно. Я проверил этот ответ WPSE и нашел эту строку кода:

 if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' ); 

Где есть функция PHP include() . В соответствии с моими знаниями WordPress я научился предпочитать get_template_part() над PHP include() . Тогда как именно я могу использовать простой get_template_part() в моем плагине.

Я не использую какой-либо цикл или что-то еще, я просто отделяю (или вы можете сказать, организуя) мой код плагина в разные файлы, чтобы в некоторых случаях я просто прокомментировал их, чтобы они исчезли там, где они не нужны. Я пытался:

 get_template_part( 'my', 'special-admin' ); 

а затем после ошибки измените его на:

 get_template_part( 'my', 'specialadmin' ); 

Но вы знаете, что это не проблема. Я нахожусь на локальном сервере, используя WAMP.

Solutions Collecting From Web of "Как включить файл с помощью get_template_part () в плагин?"

get_template_part – это функция темы . Вы не можете загружать файлы с этой функцией. Взгляните на источник, и вы заметите, что работа выполняется с помощью locate_template . Посмотрите на этот источник, и вы увидите, что он всегда загружается из тематических каталогов.

Как бы сильно вы не хотели использовать get_template_part это неправильная функция.

Вам нужно будет include ваши файлы.

Причина, по-моему, для get_template_part заключается в том, чтобы позволить get_template_part темы – иначе, чтобы облегчить создание дочерних тем. Плагины не предназначены для расширения таким образом, поэтому нет необходимости в get_template_part или для любого эквивалента плагина.

@s_ha_dum правильно, что get_template_part является функцией темы, но он неверен, что плагины не предназначены для расширения таким образом. Это просто сложнее.

Это сообщение от Pippin, описывает, как использовать функцию, которая будет выполнять работу по загрузке ваших шаблонов плагинов, позволяя пользователям переопределять ваши шаблоны плагинов в своей теме.

По сути, он выглядит в специальной папке в теме, а затем, если ее не найти, он находится в папке шаблонов для плагина.

Как уже было сказано, вы не можете использовать get_template_part в плагинах, но есть удобный класс в Github (созданный Gary Jones), который имитирует функциональность get_template_part в плагинах, добавив плагин в резервный ( get_template_part тема> родительская тема> плагин) ,

Таким образом, вы можете переопределить «часть шаблона» плагина внутри дочерней темы или родительской темы.

Использование (взято из инструкций репо Github):

  1. Скопируйте class-gamajo-template-loader.php в свой плагин. Это может быть файл в корне плагина или, лучше, каталог.
  2. Создайте новый файл, например class-your-plugin-template-loader.php , в том же каталоге.
  3. Создайте class в этом файле, который расширяет Gamajo_Template_Loader .
  4. Переопределите свойства класса в соответствии с вашим плагином. Вы также можете переопределить метод get_templates_dir() если он не подходит для вас.
  5. Теперь вы можете создать экземпляр своего класса загрузчика шаблонов и использовать его для вызова get_template_part() . Это может быть в обратном вызове короткого кода или что-то, что вы хотите, чтобы разработчики темы включали в свои файлы.

Пример кода:

 // Template loader instantiated elsewhere, such as the main plugin file. $meal_planner_template_loader = new Meal_Planner_Template_Loader; // Use it to call the get_template_part() method. This could be within // a shortcode callback, or something you want theme developers // to include in their files. $meal_planner_template_loader->get_template_part( 'recipe' ); // If you want to pass data to the template, call the set_template_data() // method with an array before calling get_template_part(). // set_template_data() returns the loader object to allow for method chaining. $data = array( 'foo' => 'bar', 'baz' => 'boom' ); $meal_planner_template_loader ->set_template_data( $data ); ->get_template_part( 'recipe' ); // The value of bar is now available inside the recipe template as $data->foo. // If you wish to use a different variable name, add a second parameter // to set_template_data(): $data = array( 'foo' => 'bar', 'baz' => 'boom' ); $meal_planner_template_loader ->set_template_data( $data, 'context' ) ->get_template_part( 'recipe', 'ingredients' ); // The value of bar is now available inside the recipe template as $context->foo.