add_filter запускается перед add_action В Wordpress

На самом деле я пытаюсь добавить некоторые действия и . Но я не знаю, почему работает раньше. Поскольку я установил тот же приоритет, и я прочитал в документации Wordpress, что если действия имеют одинаковый приоритет, то действие, написанное первым, всегда выполняется первым.

Но я не знаю, в моем случае работает раньше.

Вот мой код:

add_action код, который написан выше в моем коде.

      add_action('leaky_paywall_form_processing', 'zeen101_custom_registration_fields_save', 10, 5);
function zeen101_custom_registration_fields_save($post_data, $user_id, $price, $mode, $site)
{
    if ($post_data['company']) {
        update_user_meta($user_id, 'company', sanitize_text_field($post_data['company']));
    }
    if ($post_data['city']) {
        update_user_meta($user_id, 'city', sanitize_text_field($post_data['city']));
    }
}

код add_filter, который написан ниже в моем коде

      add_filter('leaky_paywall_mailchimp_merge_fields', 'zeen101_custom_mailchimp_merge_fields', 10, 2);
function zeen101_custom_mailchimp_merge_fields($merge_fields, $email)
{
    $mode = leaky_paywall_get_current_mode();
    $user = get_user_by('email', $email);
    if (!$user) {
        return $merge_fields;
    }

    $level_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id', true);
    $levels = leaky_paywall_get_levels();
    $level_name = $levels[$level_id]['label'];

    $created = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_created', true);
    $expires = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires', true);
    $firstname = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_first_name', true);
    $lastname = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_last_name', true);
    $email = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_email', true);

    $company = get_user_meta($user->ID, 'company', true);
    $city = get_user_meta($user->ID, 'city', true);

    $merge_fields['LP_LEVEL'] = $level_name;
    $merge_fields['LP_SUBDATE'] = $created;
    $merge_fields['LP_EXPIRES'] = $expires;
    $merge_fields['FNAME'] = $firstname;
    $merge_fields['LNAME'] = $lastname;
    $merge_fields['EMAIL'] = $email;
    $merge_fields['COMPANY'] = $company;
    $merge_fields['CITY'] = $city;

    return $merge_fields;
}

я хочу бежать add_actionбудет первый add_filter. Как я могу это сделать?

Спасибо.

1 ответ

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

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

Чтобы лучше объяснить, я буду ссылаться на плагин , с которым вы работаете. Начиная со строки 160 в этом файле вы видите это:

          if (leaky_paywall_is_free_registration($subscriber_data)) {
        do_action('leaky_paywall_after_free_user_created', $user_id, $_POST);
    }

    do_action('leaky_paywall_form_processing', $_POST, $user_id, $subscriber_data['price'], $mode, $site, $subscriber_data['level_id']);

Этот блок кода сначала вызывает хук а потом звонит , в таком порядке, всегда. Неважно, какой код вы написали, он всегда будет в таком порядке (если, конечно, они не изменят свой код).

Если у вас есть две разные функции, которые вы хотите вызвать для одного и того же хука, вот где вступают в игру приоритеты.

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

Другие вопросы по тегам