如何让WordPress代码片段仅在指定单页加载以优化性能
实现WooCommerce账户自定义端点仅在指定页面加载的解决方案
问题背景
因首页及其他页面加载时长问题,需要让添加WooCommerce账户自定义端点的代码仅在单个页面加载。当前使用的注册端点代码如下:
add_action( 'init', 'register_uzleteim_endpoint'); /** * Register New Endpoint. * * @return void. */ function register_uzleteim_endpoint(){ add_rewrite_endpoint( 'uzleteim', EP_ROOT | EP_PAGES ); } add_filter( 'query_vars', 'uzleteim_query_vars' ); /** * Add new query var. * * @param array $vars vars. * * @return array An array of items. */ function uzleteim_query_vars( $vars ) { $vars[] = 'uzleteim'; return $vars; } add_filter( 'woocommerce_account_menu_items', 'add_uzleteim_tab' ); /** * Add New tab in my account page. * * @param array $items myaccount Items. * * @return array Items including New tab. */ function add_uzleteim_tab( $items ) { $items['uzleteim'] = 'Üzleteim'; return $items; } add_action( 'woocommerce_account_uzleteim_endpoint', 'add_uzleteim_content' ); /** * Add content to the new tab. * * @return string. */ function add_uzleteim_content() {}
曾尝试将代码包裹在wp_footer钩子中,报错“unexpected if”,代码如下:
add_action( 'wp_footer', function () { if ( ! is_page( array( 42, 'Page Name', 'about-us', 968 ) ) ) return; // rest of snippet code here } );
错误原因
- 端点注册(
add_rewrite_endpoint)必须在init钩子(WP初始化阶段)执行,放到wp_footer会导致重写规则无法正确生效,同时可能引发语法错误。 - 代码结构可能存在括号或引号不匹配的问题,触发“unexpected if”错误。
正确实现方案
方案一:全局注册端点,仅在指定页面显示菜单和内容
这种方式保证重写规则全局生效,同时仅在目标页面加载相关菜单和内容,避免额外负载:
// 全局注册端点(必须在init钩子执行) add_action( 'init', 'register_uzleteim_endpoint'); function register_uzleteim_endpoint(){ add_rewrite_endpoint( 'uzleteim', EP_ROOT | EP_PAGES ); } // 全局添加查询变量 add_filter( 'query_vars', 'uzleteim_query_vars' ); function uzleteim_query_vars( $vars ) { $vars[] = 'uzleteim'; return $vars; } // 仅在指定页面添加账户菜单 add_filter( 'woocommerce_account_menu_items', 'add_uzleteim_tab' ); function add_uzleteim_tab( $items ) { // 替换为你的目标页面ID/别名/名称 $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( is_page( $target_pages ) ) { $items['uzleteim'] = 'Üzleteim'; } return $items; } // 仅在指定页面加载端点内容 add_action( 'woocommerce_account_uzleteim_endpoint', 'add_uzleteim_content' ); function add_uzleteim_content() { $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( !is_page( $target_pages ) ) { return; } // 此处添加你的自定义内容代码 }
方案二:仅在指定页面注册端点(需注意重写规则)
如果需要完全避免全局注册端点,可在init钩子中添加条件判断,但首次访问目标页面后,需手动进入设置→固定链接页面并保存,确保重写规则生效:
add_action( 'init', 'register_uzleteim_endpoint'); function register_uzleteim_endpoint(){ $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( is_page( $target_pages ) ) { add_rewrite_endpoint( 'uzleteim', EP_ROOT | EP_PAGES ); } } add_filter( 'query_vars', 'uzleteim_query_vars' ); function uzleteim_query_vars( $vars ) { $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( is_page( $target_pages ) ) { $vars[] = 'uzleteim'; } return $vars; } add_filter( 'woocommerce_account_menu_items', 'add_uzleteim_tab' ); function add_uzleteim_tab( $items ) { $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( is_page( $target_pages ) ) { $items['uzleteim'] = 'Üzleteim'; } return $items; } add_action( 'woocommerce_account_uzleteim_endpoint', 'add_uzleteim_content' ); function add_uzleteim_content() { $target_pages = array( 42, 'Page Name', 'about-us', 968 ); if ( !is_page( $target_pages ) ) { return; } // 此处添加你的自定义内容代码 }
内容的提问来源于stack exchange,提问作者Róbert Ádám Horváth
相关产品推荐
相关产品推荐

