Php 在Wordpress中的“添加”操作之前,正在运行“添加”筛选器

Php 在Wordpress中的“添加”操作之前,正在运行“添加”筛选器,php,wordpress,wordpress-action,Php,Wordpress,Wordpress Action,实际上,我正在尝试添加一些操作add_action和add_filter。但是我不知道为什么add\u filter在add\u action之前运行。由于我设置了相同的优先级&我在Wordpress文档中读到,如果操作具有相同的优先级,那么首先编写的操作总是首先运行 但是我不知道在我的例子中,add\u filter在add\u action之前运行 这是我的密码: 添加上面写在我的代码中的动作代码 add_action('leaky_paywall_form_processing', 'ze

实际上,我正在尝试添加一些操作
add_action
add_filter
。但是我不知道为什么
add\u filter
add\u action
之前运行。由于我设置了相同的优先级&我在Wordpress文档中读到,如果操作具有相同的优先级,那么首先编写的操作总是首先运行

但是我不知道在我的例子中,
add\u filter
add\u 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('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
。我怎么能做到

谢谢。

动作和过滤器是,只是有一种模式,有时使用动作,有时使用过滤器。基本上,操作允许你“做某事”,过滤器允许你“改变某事”。你可能已经知道了,但我只是想说清楚。一般来说,它们被称为钩子,这就是我在这里所指的钩子

在代码示例中,有两个钩子,一个叫做
leaky\u paywall\u form\u processing
,另一个叫做
leaky\u paywall\u mailchimp\u merge\u fields
。因为这是两个不同的钩子,它们之间的优先级并不重要

为了更好地解释,我将与你一起工作。从该文件的第160行开始,可以看到:

if(泄漏的付费墙是免费的注册($subscriber\u data)){
do_action('free_user_created'后出现漏洞的付费墙,$user_id,$\u POST);
}
do_action('泄漏的付费墙\表单\处理',$发布,$用户\ id,$用户\数据['price'],$模式,$站点,$用户\数据['level\ id']);
该代码块在创建了免费用户后首先调用hook
leaky\u paywall\u,然后总是按照该顺序调用
leaky\u paywall\u form\u processing
。不管你写了什么代码,它都是按顺序写的(当然,除非他们更改代码)

如果你有两个不同的函数,你想为同一个钩子调用,这就是优先级的所在

不幸的是,该插件的MailChimp扩展似乎是付费的,所以我看不到源代码,但最终还是由插件本身决定钩子的调用顺序