add_action 与 "woocommerce_account_dashboard" 挂钩错位

add_action with "woocommerce_account_dashboard" hook is misplaced

我最近安装了一个非常简单的插件,可以在导航菜单之前的 woocommerce 帐户页面中显示用户头像。

我一直在尝试包含该功能,以便通过 woocommerce_account_dashboard 挂钩在帐户仪表板中显示头像,但它的位置不符合我的预期。

/templates/myaccount/dashboard.php文件中,我做了如下改动:

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}

$allowed_html = array(
    'a' => array(
        'href' => array(),
    ),
);
?>

<p class="pix-mb-0">
    <?php
    add_action('woocommerce_account_dashboard', 'uafw_show_avatar_woo', 10, 0 );
    
    printf(
        /* translators: 1: user display name 2: logout url */
        wp_kses( __( 'Hello %1$s!', 'woocommerce' ), $allowed_html ),
        '<strong class="text-yellow">' . esc_html( $current_user->display_name ) . '</strong>',
        esc_url( wc_logout_url() )
    );
    ?>
</p>

<p class="text-xs">
    <?php $current_user = wp_get_current_user();
    $current_user_id = $current_user->ID;
    echo __('Account ID: '), $current_user_id; ?>
</p>
<h1 class="h5 text-heading-default font-weight-bold pix-ready pix-mb-10" style="padding-bottom: 0.3em; border-bottom: 1px solid rgba(255,255,255,0.1)">Recent Orders</h1>
<?php add_action( 'woocommerce_account_dashboard', 'action_rorders_woocommerce_account_dashboard', 30, 0 ); ?>

<?php
    /**
     * My Account dashboard.
     *
     * @since 2.6.0
     */
    do_action( 'woocommerce_account_dashboard' );

第一个函数调用是我要显示的头像,第二个是显示最近订单的函数。

一切正常,但头像没有显示在 'welcome' 段落之前,而是显示在订单 table 的正上方。

我试图打乱优先级,但也没用。我错过了什么?

“一切正常,但头像没有显示在 'welcome' 段落之前,而是显示在订单 table 的正上方。”

This is because the callback function of your add_action is executed where the do_action is located


假设这是您调用的函数的输出:

function uafw_show_avatar_woo() {
    echo '<div>Show avatar woo</div>';
}

步骤1)然后在模板文件中,要调用和显示功能的地方,只需要使用:

<?php uafw_show_avatar_woo(); ?>

步骤 1) 创建您自己的 do_action,将其添加到您要显示回调函数输出的位置:

<?php do_action( 'my_custom_do_action' ); ?>

步骤 2) 然后通过 add_action

执行 do_action
add_action( 'my_custom_do_action', 'uafw_show_avatar_woo' );