«Предупреждение: отсутствует аргумент 2 для WC_Custom_Product» в Woocommerce - PullRequest
0 голосов
/ 25 ноября 2018

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

Предупреждение: отсутствует аргумент 2 для WC_Custom_Product :: action_woocommerce_before_single_product_summary () в /wp-content/themes/custom-theme/classes/wc-custom-product.php

Функция выглядит следующим образом, естьне так много, но я не знаю, как это исправить

public function __construct() {
    $this->product_id = get_the_ID();
    $this->product = wc_get_product( $this->product_id );
    add_action( 'woocommerce_before_single_product_summary', array($this, 'action_woocommerce_before_single_product_summary'), 10, 2 );
}

function action_woocommerce_before_single_product_summary( 
    $woocommerce_show_product_sale_flash, $int ) { 
    echo "<div class='product-row first'>";
}

Любая помощь будет высоко ценится

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Хук действия Woocommerce woocommerce_before_single_product_summary, расположенный в content-product.php шаблоне , принимает только один аргумент и в большинстве случаев он никогда не используется.

Обратите внимание, что хукам действий не нужно возвращать аргумент, как это делают хуки фильтров.

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

Так что попробуйте вместо этого:

public function __construct() {
    $this->product_id = get_the_ID();
    $this->product = wc_get_product( $this->product_id );
    add_action( 'woocommerce_before_single_product_summary', array($this, 'action_woocommerce_before_single_product_summary') );
}

public function action_woocommerce_before_single_product_summary() { 
    echo "<div class='product-row first'>";
}

Должно работать без ошибок.

0 голосов
/ 25 ноября 2018

То, как вы определили функцию, будет работать только с 2 передаваемыми ей параметрами.Действие woocommerce woocommerce_before_single_product_summary, по-видимому, передает только один параметр, если он вообще существует.

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

function action_woocommerce_before_single_product_summary( $woocommerce_show_product_sale_flash = null, $int = 0 ) { echo ""; }

Обратите внимание, как для безопасной меры я определил $ woocommerce_show_product_sale_flash как NULL?Если призыв к действию передает какие-либо значения этой функции, значения по умолчанию (ноль и ноль) будут перезаписаны.

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

...