Изменение значения переменной с помощью хука do_action_ref_array - передача по ссылке - PullRequest
0 голосов
/ 01 июня 2018

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

    private function before_send_mail() {
    $abort = false;

    do_action_ref_array( 'wpcf7_before_send_mail', array(
        $this->contact_form,
        &$abort,
        $this,
    ) );

    return ! $abort;
}

Теперь я хочу использовать хук do_action_ref_array, чтобы изменить значение $abort с false на true.Я пробовал много вещей, включая следующие:

function abort_send(&$cf7array) {
$cf7array[1] = true;
}
add_action( 'wpcf7_before_send_mail', 'abort_send' );

Я знаю, что должен иметь возможность изменить значение &$abort внутри abort_send function (передача по ссылке).Но я не могу точно понять, как.

Любая помощь будет принята с благодарностью!Спасибо

1 Ответ

0 голосов
/ 01 июня 2018

Я только что понял, как это сделать.Хитрость в том, что do_action_ref_array передает свой аргумент не как массив, а вместо этого передает каждое значение массива как отдельный аргумент.Но на этом все не заканчивается ... Очевидно, add_action принимает только 1 аргумент по умолчанию.Другими словами, чтобы передать все отдельные аргументы части массива в do_action_ref_array, это значение по умолчанию необходимо изменить.Окончательный результат, который в итоге сработал для меня:

function abort_send($arg1, &$abort, $arg3 ) {
    $abort = true;
}
add_action( 'wpcf7_before_send_mail', 'abort_send', 10, 999 );

Здесь 10 относится к порядку выполнения ловушки добавленного действия, а 999 - это количество принятых аргументов (опять же, 1 на 1по умолчанию).

Я надеюсь, что это поможет другим с такой же проблемой.Если что-то в моем объяснении неясно, пожалуйста, дайте мне знать, и я постараюсь помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...