为WordPress / WooCommerce中的钩子函数设置正确的优先级

时间:2017-12-23 14:11:36

标签: php wordpress woocommerce hook price

如何在没有连续尝试错误的情况下发现钩子函数的正确优先级?

我必须在正常价格之下的产品页面中找到“数字价格”(precio digital)。

php代码是这样的:

add_action( 'woocommerce_single_product_summary', "show_digital_price", 10 );

正如您现在所看到的,数字价格高于正常价格:https://www.editorialufv.es/catalogo/territory-inhabited/

我应该更改号码10并输入1112

我的问题:如果没有试错法,有没有快速找到合适的优先号?

1 个答案:

答案 0 :(得分:2)

content-single-product.php模板文件中激活了 woocommerce_single_product_summary 挂钩,您会看到:

<?php
    /**
     * woocommerce_single_product_summary hook.
     *
     * @hooked woocommerce_template_single_title - 5
     * @hooked woocommerce_template_single_rating - 10
     * @hooked woocommerce_template_single_price - 10
     * @hooked woocommerce_template_single_excerpt - 20
     * @hooked woocommerce_template_single_add_to_cart - 30
     * @hooked woocommerce_template_single_meta - 40
     * @hooked woocommerce_template_single_sharing - 50
     * @hooked WC_Structured_Data::generate_product_data() - 60
     */
    do_action( 'woocommerce_single_product_summary' );
?>

这将为您提供有关WooCommerce在此钩子上使用的优先级的信息。

  

因此,您可以在{strong> show_digital_price() 11 之间优先使用19函数...

现在有时其他插件或/和一些主题可以使用其他一些优先级。在这种情况下,您可以使用这个小代码片段:

global $wp_filter;
echo '<pre>';
print_r( $wp_filter['woocommerce_single_product_summary'] );
echo '</pre>';

这将输出数组中所有已挂钩的函数,其中包含已使用的优先级和已定义的hook (此处为woocommerce_single_product_summary动作挂钩)的接受参数。

下面是实际输出的示例:

WP_Hook Object (
    [callbacks] => Array (
        [5] => Array  (
            [woocommerce_template_single_title] => Array (
                [function] => woocommerce_template_single_title
                [accepted_args] => 1
            )
        )
        [10] => Array (
            [woocommerce_template_single_rating] => Array  (
                [function] => woocommerce_template_single_rating
                [accepted_args] => 1
            )
            [woocommerce_template_single_price] => Array (
                [function] => woocommerce_template_single_price
                [accepted_args] => 1
            )
        )
        [20] => Array (
            [woocommerce_template_single_excerpt] => Array (
                [function] => woocommerce_template_single_excerpt
                [accepted_args] => 1
            )
        )
        [30] => Array (
            [woocommerce_template_single_add_to_cart] => Array (
                [function] => woocommerce_template_single_add_to_cart
                [accepted_args] => 1
            )
        )
        [31] => Array (
            [WC_Subscriptions_Synchroniser::products_first_payment_date] => Array (
                [function] => WC_Subscriptions_Synchroniser::products_first_payment_date
                [accepted_args] => 1
            )
        )
        [40] => Array (
            [woocommerce_template_single_meta] => Array(
                [function] => woocommerce_template_single_meta
                [accepted_args] => 1
            )
        )
        [50] => Array (
            [woocommerce_template_single_sharing] => Array (
                [function] => woocommerce_template_single_sharing
                [accepted_args] => 1
            )
        )
        [60] => Array (
            [000000007484d339000000001aaf1b88generate_product_data] => Array (
                [function] => Array (
                    [0] => WC_Structured_Data Object (
                        [_data:WC_Structured_Data:private] => Array ( )
                    )
                    [1] => generate_product_data
                )
                [accepted_args] => 1
            )
        )
    )
    [iterations:WP_Hook:private] => Array ( )
    [current_priority:WP_Hook:private] => Array ( )
    [nesting_level:WP_Hook:private] => 0
    [doing_action:WP_Hook:private] => 
)

正如您在此示例中所看到的,Woocommerce订阅插件以优先级31添加了一个钩子。