Почему хуки в WooCommerce не работают?

Давно не работал с WooCommerce, и теперь установил его с нуля вместе с WordPress и темой Kadence. Необходимо убрать некоторые поля из платежного адреса и других разделов. Я попытался использовать хуки, вставляя код в плагин, но изменений не произошло. Вот пример кода, который я использовал: 

<pre><code class="php">add_filter( 'woocommerce_checkout_fields', 'wpbl_remove_some_fields', 9999 );
 
function wpbl_remove_some_fields( $array ) {
    //unset( $array['billing']['billing_first_name'] ); // Имя
    //unset( $array['billing']['billing_last_name'] ); // Фамилия
    //unset( $array['billing']['billing_email'] ); // Email
    //unset( $array['order']['order_comments'] ); // Примечание к заказу
 
    unset( $array['billing']['billing_phone'] ); // Телефон
    unset( $array['billing']['billing_company'] ); // Компания
    unset( $array['billing']['billing_country'] ); // Страна
    unset( $array['billing']['billing_address_1'] ); // 1-ая строка адреса 
    unset( $array['billing']['billing_address_2'] ); // 2-ая строка адреса 
    unset( $array['billing']['billing_city'] ); // Населённый пункт
    unset( $array['billing']['billing_state'] ); // Область / район
    unset( $array['billing']['billing_postcode'] ); // Почтовый индекс
 
    // Возвращаем обработанный массив
    return $array;
}</code></pre>

Кроме того, я установил плагин "Checkout Field Editor for WooCommerce", но он тоже не дал результатов. Теперь я зашел в тупик и не знаю, куда еще копать. Как мне удалить ненужные поля в платежном адресе?
  • 15 декабря 2024 г. 19:03
Ответы на вопрос 2
Если хуки в WooCommerce не работают как ожидается, возможно, есть несколько причин, по которым ваш код не выполняется. Давайте рассмотрим возможные решения и вещи, которые нужно проверить:

1. **Место размещения кода:** Убедитесь, что ваш код находится в правильном месте. Лучше всего разместить код в файле `functions.php` вашей темы или в собственном плагине. Если вы используете дочернюю тему, убедитесь, что вы добавляете код в `functions.php` дочерней темы.

2. **Проверка наличия конфликтов:** Проверьте, не конфликтует ли код с другими плагинами или темами. Отключите все остальные плагины на время, чтобы увидеть, сохраняется ли проблема. Если код начинает работать, вы можете снова включать плагины по одному, чтобы выявить конфликт.

3. **Кэширование:** Если у вас включен кэш (например, плагин кэширования), очистите кэш после внесения изменений в код. Иногда изменения не отображаются из-за кэшированного контента.

4. **Приоритет хуков:** У вас указан высокий приоритет (9999) для вашего фильтра. Это обычно не вызывает проблем, но попробуйте установить более стандартное значение, например, 10, чтобы видеть, изменится ли это что-то.

5. **Логи ошибок:** Проверьте логи ошибок PHP на вашем сервере. Возможно, есть синтаксическая ошибка или другая ошибка, которая мешает коду выполняться.

6. **Обновление WooCommerce:** Убедитесь, что вы используете последнюю версию WooCommerce и WordPress. Иногда старые версии могут вести себя некорректно.

7. **Код для удаления полей:** Ваш код для удаления полей выглядит корректно. Если хотите убедиться, что он работает, можно разместить только одну строку `unset`, чтобы изолировать проблему. Например:

   ```php
   add_filter( 'woocommerce_checkout_fields', 'wpbl_remove_some_fields', 10 );

   function wpbl_remove_some_fields( $fields ) {
       unset( $fields['billing']['billing_phone'] ); // Удаляем поле "Телефон"
       return $fields;
   }
   ```

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

```php
add_filter( 'woocommerce_checkout_fields', 'my_custom_checkout_fields', 10, 1 );

function my_custom_checkout_fields( $fields ) {
    error_log( print_r( $fields, true ) ); // Добавьте это для отладки на наличие полей
    // disconnect fields
    unset( $fields['billing']['billing_phone'] );
    // верните измененные поля
    return $fields;
}
```

Проверьте файл журнала ошибок (обычно находится в `wp-content/debug.log` если у вас включен `WP_DEBUG`), чтобы увидеть какие поля выводятся.

Если вы проверили всё это и всё равно не работает, рассмотрите возможность использования `Checkout Field Editor` более детально или попробуйте другой плагин, например "WooCommerce Checkout Manager".
В новых версиях WC специальные страницы сделаны уже не на шорткодах, а на блоках Гутенберга, а потому старые трюки не работают. Можно блочное содержимое страницы заменить на старый добрый шорткод, но неизвестно как долго устаревшая технология будет поддерживаться.
Похожие вопросы