✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Включение пользовательских шаблонов в наши плагины WordPress

32

Я думаю, что один из наиболее недооцененных аспектов — или, возможно, один из редко обсуждаемых аспектов разработки пользовательских плагинов — это возможность включать пользовательские шаблоны в наши плагины WordPress.

И, если честно, я понимаю: я довольно убеждён в том, каким должен быть плагин и какой должна быть тема.

То есть:

  • темы для презентаций,
  • плагины — это функциональность.

Если я включаю шаблоны в плагин, разве я не делаю то же самое, что когда разработчики включают функциональность в свои темы?

Как и во многих других вещах в разработке, я думаю, что это зависит от обстоятельств. Я имею в виду, что добавление большого количества функций, которые привязывают вас к теме, — это то, чем я не являюсь поклонником. Точно так же, если у вас есть плагин, предназначенный для демонстрации данных во внешнем интерфейсе и не зависящий от темы, тогда это имеет смысл.

Так что нужно быть рассудительным в своих решениях.

Несмотря на это, есть общий набор шагов, которые мы можем использовать при включении пользовательских шаблонов в наши плагины WordPress.

И это то, что этот пост собирается показать.

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

Включение пользовательских шаблонов в наши плагины WordPress

Ибо оба, однако, знают это:

Используя эти хуки, вы можете сообщить WordPress, где в вашем плагине находятся пользовательские шаблоны.

Организация шаблонов

Что касается меня, у меня обычно есть  каталог шаблонов в моем плагине, который находится на том же уровне, что  и каталоги assets, src и vendor .

Включение пользовательских шаблонов в наши плагины WordPress

Это позволяет легко узнать, где они находятся, и обеспечивает согласованный способ включения их во все созданные вами плагины. В конце концов, есть кое-что, что можно сказать о последовательности в используемых нами соглашениях.

Включение шаблонов

Предполагая, что у вас есть  шаблон single-acme.php и шаблон archive-acme.php, включить его несложно. И хотя я больше люблю объектно-ориентированное программирование, я покажу, как включить эти шаблоны с помощью процедурного кода.

При желании этот код легко преобразовать в объектно-ориентированный. Кроме того, я предполагаю, что вы также включаете это для пользовательских типов сообщений.

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

Тем не менее, вот код.

Определение хуков

Во-первых, нам нужно определить хуки. Это относительно просто, так как мы собираемся использовать хуки, описанные выше.

Во- первых, единый шаблон :

<?php

add_action('single_template', 'acmeIncludeSingleTemplate');
/**
 * Includes a custom, single template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeSingleTemplate($originalTemplate)
{
   // More to come...
}

И затем шаблон архива :

<?php

add_action('archive_template', 'acmeIncludeArchiveTemplate');
/**
 * Includes a custom, archive template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalArchiveTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeArchiveTemplate($originalArchiveTemplate)
{
  // More to come...
}

И теперь мы можем реализовать код для каждой из функций.

Добавление кода

Итак, сначала мы рассмотрим единый шаблон :

<?php

add_action('single_template', 'acmeIncludeSingleTemplate');
/**
 * Includes a custom, single template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeSingleTemplate($originalTemplate)
{
  $singleTemplate = plugin_dir_path(
    dirname(
      __DIR__) );
  $singleTemplate .= '/templates/single-acme.php';

  if ('acme-cpt' === get_post_type(get_the_ID())) {
      if (file_exists($singleTemplate)) {
          return $singleTemplate;
      }
  }

  return $originalTemplate;
}

А теперь шаблон архива :

<?php

add_action('archive_template', 'acmeIncludeArchiveTemplate');
/**
 * Includes a custom, archive template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalArchiveTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeArchiveTemplate($originalArchiveTemplate)
{
  $archiveTemplate = plugin_dir_path(
    dirname(
      __DIR__) );
  $archiveTemplate .= '/templates/archive-acme.php';

  if ('acme-cpt' === get_post_type(get_the_ID())) {
      if (file_exists($archiveTemplate)) {
          return $archiveTemplate;
      }
  }

  return $originalArchiveTemplate;
}

Если вы обращали пристальное внимание на код, то знаете, что он мало чем отличается. Собственно, общий процесс можно описать следующим образом:

  1. определить крючок,
  2. найти шаблон,
  3. проверьте пользовательский тип сообщения,
  4. шаблон есть, используйте его
  5. в противном случае используйте шаблон по умолчанию

И это процесс как для одиночных, так и для архивных шаблонов.

Написание совместимых шаблонов

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

Нет, вы не сможете разместить каждую тему, но такова природа тем WordPress. Смысл в том, чтобы взять на себя как можно больше работы по извлечению и отображению данных из шаблона, чтобы фронтенд-разработчики могли легко ими управлять.

Источник записи: tommcfarlin.com

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