You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WooCommerce账户的每个自定义端点标签显示对应内容?

解决WooCommerce账户自定义端点内容不对应问题

问题根源

你当前的代码所有自定义端点都绑定了同一个mine函数,这个函数无法识别当前访问的是哪个端点,所以不管点哪个标签,显示的内容都是一样的。要实现每个端点显示对应内容,必须让回调函数能获取到当前端点的标识,从而输出匹配的内容。

解决方法

我们可以通过闭包函数为每个端点绑定独立的回调,在闭包里捕获当前循环的端点键,然后根据这个键从数据库里获取对应的自定义内容(假设你的pao表新增了pao_content字段存储每个端点的内容)。

修改后的核心代码

替换你原来的mine函数和最后的foreach绑定代码:

// 为每个端点绑定独立的闭包回调
foreach(pa_custom_endpoint_keys() as $endpointkey=>$endpointlable){
    add_action( 'woocommerce_account_' . $endpointkey . '_endpoint', function() use ($endpointkey) {
        global $wpdb;
        $pao = $wpdb->prefix . 'pao';
        
        // 根据当前端点键查询对应的自定义内容
        $content = $wpdb->get_var($wpdb->prepare(
            "SELECT pao_content FROM $pao WHERE pao_name = %s", 
            $endpointkey
        ));
        
        // 执行短码并输出内容(如果内容是短码的话)
        echo do_shortcode($content ?: '暂无内容');
    });
}

必要前提

  1. 确保你的wp_pao表新增了pao_content字段,用来存储每个端点对应的自定义内容(可以是HTML、短码等)。如果还没添加,执行以下SQL语句:
ALTER TABLE wp_pao ADD COLUMN pao_content LONGTEXT NOT NULL DEFAULT '';

(注意替换wp_为你的数据库表前缀)

  1. 修改代码后,进入WordPress后台的设置→固定链接,直接点击「保存更改」,刷新重写规则,确保端点能正常访问。

完整代码示例

function pa_custom_endpoint_keys() {
    global $wpdb;
    $pao  = $wpdb->prefix . 'pao';
    $results = $wpdb->get_results("select * from $pao");
    $endpointsdata = array();
    foreach($results as $row){
        $endpointsdata[$row->pao_name] = $row->pao_value;
    }
    return $endpointsdata;
}

add_action( 'init', 'pa_custom_endpoint' );
function pa_custom_endpoint() {
    foreach(pa_custom_endpoint_keys() as $endpointkey=>$endpointlable){
        add_rewrite_endpoint( $endpointkey, EP_ROOT | EP_PAGES );
    }
}

add_filter( 'query_vars', 'pa_custom_endpoint_query_vars', 0 );
function pa_custom_endpoint_query_vars( $vars ) {
    foreach(pa_custom_endpoint_keys() as $endpointkey=>$endpointlable){
        $vars[] = $endpointkey;
    }
    return $vars;
}

add_filter( 'woocommerce_account_menu_items', 'pa_custom_endpoint_link_my_account' );
function pa_custom_endpoint_link_my_account( $items ) {
    foreach(pa_custom_endpoint_keys() as $endpointkey=>$endpointlable){
        $items[$endpointkey] = $endpointlable;
    }
    return $items;
}

// 为每个端点绑定独立的闭包回调
foreach(pa_custom_endpoint_keys() as $endpointkey=>$endpointlable){
    add_action( 'woocommerce_account_' . $endpointkey . '_endpoint', function() use ($endpointkey) {
        global $wpdb;
        $pao = $wpdb->prefix . 'pao';
        
        // 根据当前端点键查询对应的自定义内容
        $content = $wpdb->get_var($wpdb->prepare(
            "SELECT pao_content FROM $pao WHERE pao_name = %s", 
            $endpointkey
        ));
        
        // 执行短码并输出内容(如果内容是短码的话)
        echo do_shortcode($content ?: '暂无内容');
    });
}

内容的提问来源于stack exchange,提问作者Behzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:40