ashleyg
  • 0
Учитель

get_template_part и хуки действий в темах

  • 0

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

Мой вопрос в том, является ли один метод предпочтительным по сравнению с другим.

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

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

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

Конечно, я мог бы добиться того же, используя хуки и фильтры.

Есть ли преимущество в использовании хуков/фильтров? Принимая во внимание, что целевая аудитория, которая будет использовать это, явно не разбирается в коде. Я могу дать им относительно базовые инструкции, которым они могут следовать, чтобы использовать метод шаблона, но почти наверняка запутают их до чёртиков крючками.

Или бывают ситуации, когда одно лучше другого в рамках одной темы?

Share
  1. Я предпочитаю крючки, так как они более гибкие: вы можете подключиться к ним из functions.php файла вашей темы, а также из плагинов. Я стараюсь вкладывать в плагины как можно больше логики, чтобы темы содержали в основном макеты.

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

    Что касается производительности: get_template_part() использует ( inlocate_template() ) file_exists() один, два или четыре раза (в зависимости от того, как вы это называете). Он file_exists() работает очень быстро и использует кэширование в PHP и, возможно, даже в ОС. Так что, наверное, это не проблема.

    • 0
    • В этом есть смысл. Часть моей дизайнерской мысли заключалась в том, чтобы устранить необходимость в плагинах в наиболее распространенных ситуациях использования, сохраняя при этом возможность использовать их для тех, кто этого хочет. Мой целевой клиент очень мало знает о WordPress или плагинах, не имеет права отличать хорошие плагины от плохих (главная слабость плагинов, IMO) и не хочет иметь дело с обновлением и управлением несколькими частями программного обеспечения. Так что мне нужно встроить множество функций прямо в темы, чтобы предоставить то, что они хотят: простое в использовании, простое в обслуживании, универсальное решение.

      • 0
    • Да, в этом есть смысл, и это часть того, чего я пытался добиться с помощью примера кода.

      • 0
    • Я бы подумал, что игнорировать родительский шаблон будет так же просто, как создать пустой файл шаблона для его замены. Гораздо проще, чем возиться с хуками (и, следовательно, с PHP) для пользователя, не разбирающегося в технологиях. Хотя для человека с опытом крючки будут намного проще. Что касается того, что всегда есть те, кто хочет настроить, вы даже признали, что делаете. Что касается того, почему я создаю тему, это то направление, в котором я хочу развивать свой бизнес. Построение вокруг чужого бизнеса не кажется мне очень перспективным, в том числе потому, что большинство существующих тем IMO оставляют желать лучшего. Думаю, я могу лучше.

      • 0
    • Однако хорошие моменты о проблемах с производительностью. Хотя, поскольку WordPress был разработан для работы с get_template_part, я бы подумал, что это не будет таким большим ударом по производительности. У кого-нибудь есть тесты на этот счет?

      • 0
    • Я понимаю, что вы имеете в виду, говоря об игнорировании части шаблона. Не так просто, как я думал

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

      • 0
    • На самом деле, даже подпапки не проблема. Я просто неправильно назвал папку (верный признак того, что я работаю слишком поздно, LOL). Чтобы переопределить часть шаблона, требуется только файл с тем же именем по тому же пути в дочернем элементе, что и в родительском.

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

    • 0
  3. (Относительно) легко удалить функцию из хука в дочерней теме, но гораздо сложнее заставить ее игнорировать нежелательный родительский шаблон.

    По сути, работа с хуками ближе к стороне PHP, а работа с шаблонами ближе к стороне HTML. Я использую гибридную родительскую тему, которая очень ориентирована на хуки. Это блаженство прямо до тех пор, пока вам не нужно избавиться от какого-то родительского шаблона.

    Для пользователей, которые не разбираются в технологиях, это не очень хороший вариант. Зачем им в любом случае возиться с такими внутренностями темы?

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

    PPS не все предпочитают… но вместо того, чтобы писать родительскую тему с нуля, почему бы не взять существующую родительскую тему и предоставить пользователю простую дочернюю тему?

    • 0

Оставить ответ

You must login to add an answer.