2017-02-20 19 views
0

Почему это предпочтительный вариант, чтобы изменения функций WooCommerce помещались в файл 'function.php' темы? Сверхурочная работа сделала бы файл довольно большим. Я понимаю, что лучше всего иметь множество хорошо организованных небольших файлов, а не меньше файлов.Могу ли я изменить функции WooCommerce в файле «wc-template-functions.php» или мне следует использовать файл «functions.php» для таких изменений?

Имея это в виду, что не так с копированием файлов wc-template-functions.php и wc-templates-hooks.php в вашу тему (сохраняя при этом иерархию файлов) и соответственно изменяя эти файлы ?

В качестве побочного запроса от родственника-новичка на платформе WooCommerce, я был бы признателен, если бы смог получить «Да, это работает» или «Нет, я пропустил что-то», ответ на мое понимание того, как WooCommerce; файлы, крюки, действия и шаблоны все работают с одной и другим

моего понимания:

  1. WooCommerce функция регистрируется в файл «туалет-шаблон functions.php». Для целей этого объяснения я хотел бы обратиться к записи woocommerce_breadcrumb.
  2. WooCommerce затем использует файл wc-templates-hooks.php для вызова зарегистрированной функции, используя типичную запись, такую ​​как add_action('woocommerce_before_main_content','woocommerce_breadcrumb', 20, 0);. Это просто направляет woocommerce_breadcrumb, который вызывается в пределах крюка woocommerce_before_main_content.
  3. WooCommerce затем может вывести вышеуказанное, поставив do_action('woocommerce_before_main_content');, если необходимо. В этом случае, во всех файлах шаблонов.

ответ

3

Ваше понимание 1.2.3 верно.

Однако файлы wc-template-functions.php и wc-templates-hooks.php не были заменены путем размещения похожих файлов в вашей теме, так что включение их в тему не принесет никаких результатов.

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

Нет ничего плохого в том, чтобы разделить ваш файл functions.php на более мелкие, более управляемые файлы. Итак, у вас может есть файл woocommerce-functions.php, названный тем, что вы хотели бы сохранить в своем коде WooCommerce.

Редактировать, чтобы расширить некоторые мысли

В любое время WooCommerce (или любая WordPress функция на самом деле) показывает эту закономерность:

if (! function_exists('some_function_name')) { 

    function some_function_name() { 
     echo 'taco'; 
    } 
} 

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

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

function kia_switch_loop_title(){ 
    remove_action('woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10); 
    add_action('woocommerce_after_shop_loop_item_title', 'kia_template_loop_product_title', 15); 
} 
add_action('woocommerce_before_shop_loop_item', 'kia_switch_loop_title'); 

function kia_template_loop_product_title() { 
    echo '<h4 class="we-do-what-we-want">' . get_the_title() . '</h4>'; 
} 
+0

Благодарим за руководство и помогаю успокоиться, учитывая мое понимание WooCommerce. Ваше предложение относительно «разделения» файла functions.php будет тем, что я буду рассматривать в ближайшие недели. – Craig

+1

Также имейте в виду, что вещи, которые меняют внешний вид сайта, принадлежат вашей теме (и, следовательно, 'functions.php'). Но код, который изменяет функциональность сайта, лучше всего подходит для его собственного плагина ... или плагина на сайте, который может быть сборником всех ваших «фрагментов». – helgatheviking

+0

У меня пока нет возможности научиться создавать плагины. Хотя мне известно, что считается лучшей практикой размещать такие коды в плагине, что является основной причиной для этого? Связано ли это с совместимостью? Так что, если обновление в WooCommerce и т. Д. Конфликтует с функциональностью темы, вы можете просто деактивировать ее во время выполнения соответствующих изменений? – Craig

 Смежные вопросы

  • Нет связанных вопросов^_^