仅在 WooCommerce 我的帐户仪表板中添加自定义 html 内容

Add custom html content in WooCommerce My Account Dashboard only

我将 WordPress 与 WooCommerce 和 WooCommerce 订阅插件一起使用,并且按照我的要求工作正常。

现在我想在 /my-account/ 页面中添加我的自定义 div,即我们登录系统后的 (http://www.example.com/my-account)。

所以我研究并发现了这个页面 /wp-content/plugins/woocommerce/templates/myaccount/my-account.php 并且那个页面有下面的代码。

<?php 
defined( 'ABSPATH' ) || exit;

do_action( 'woocommerce_account_navigation' ); ?>

<div class="woocommerce-MyAccount-content">
    <?php       
        do_action( 'woocommerce_account_content' );
    ?>
</div>

因此我添加了类似这样的代码

<div>Test</div>

低于 do_action( 'woocommerce_account_content' ); 但随后它出现在所有页面中,如 my-account/orders//my-account/downloads/ 等。我不想要它。

如何才能仅在 /my-account/ 页面中显示此内容?此外,我如何才能通过复制我的一个活动主题来覆盖此页面,这样我就不需要对插件的核心文件进行更改?

您在使用模板方面走在了正确的轨道上,但还不够深入。我们可以通过另一个 do_action() 看到它仍在您正在处理的代码中引入另一个模板 - 在本例中,是专门用于该仪表板页面的代码。

要更改的代码

而不是 /wp-content/plugins/woocommerce/templates/myaccount/my-account.php,你想去: /wp-content/plugins/woocommerce/templates/myaccount/dashboard.php.

在那里,您会找到这段代码(显示默认消息),您可以在那里添加您的自定义 div,它只会显示在仪表板上。在第 50 行左右(截至撰写本文时),您会看到

    printf(
        wp_kses( $dashboard_desc, $allowed_html ),
        esc_url( wc_get_endpoint_url( 'orders' ) ),
        esc_url( wc_get_endpoint_url( 'edit-address' ) ),
        esc_url( wc_get_endpoint_url( 'edit-account' ) )
    );
    ?>
</p>

您可以在结束 </p> 下添加任何自定义代码以保留在该段落下。如果你想要它在段落之上,你会在第 41 行附近开始写,在结束 </p>

之后再次

覆盖模板

您可能希望在您的主题中覆盖该模板,因此在您的主题中,创建一个 folder/file 结构,如下所示:

[yourtheme]/woocommerce/myaccount/dashboard.php。您有意不在主题覆盖中包含 templates。您可以将 dashboard.php 复制到此文件夹并编辑该版本。

这里有一些关于模板结构和覆盖的开发人员文档,可能适合在此处查看:https://docs.woocommerce.com/document/template-structure/

要使其仅显示在“我的帐户”仪表板中而不覆盖任何模板文件,您可以改用以下挂钩函数:

add_action( 'woocommerce_account_dashboard', 'custom_account_dashboard_content' );
function custom_account_dashboard_content(){
    echo '<div>' . __("Test", "woocommerce") . '</div>';
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

自定义 html 内容仅按预期添加到我的帐户仪表板 (未覆盖任何模板文件):

注意:这需要替换回WooCommerce原始相关模板文件。