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

WordPress自定义器is_page()失效,页面定制选项全部显示问题排查

解决WordPress定制器仅显示特定页面对应选项的问题

核心问题分析

直接用is_page()在customize_register钩子中判断是无效的——因为定制器后台的上下文和前端页面不同,is_page()依赖的前端查询环境在这里不生效。另外$currentPage未定义是因为变量未初始化就使用,补上变量声明即可解决警告。

正确实现代码

在主题的functions.php中添加以下代码,以仅在预览指定页面时加载对应定制选项为例:

add_action( 'customize_register', 'custom_page_specific_customize' );
function custom_page_specific_customize( $wp_customize ) {
    // 初始化变量,避免未定义警告
    $current_preview_id = 0;
    // 获取定制器当前预览的页面URL,转换为页面ID
    if ( isset( $_GET['url'] ) ) {
        $current_preview_id = url_to_postid( $_GET['url'] );
    }

    // 仅在预览目标页面时加载定制项(替换为你的目标页面ID)
    if ( $current_preview_id === 5 ) {
        // 添加专属设置区块
        $wp_customize->add_section( 'target_page_custom_section', array(
            'title'    => '目标页面专属设置',
            'priority' => 30,
        ) );

        // 添加具体设置项(示例:文本输入框)
        $wp_customize->add_setting( 'target_page_custom_text', array(
            'default'           => '',
            'sanitize_callback' => 'sanitize_text_field',
        ) );

        $wp_customize->add_control( 'target_page_custom_text', array(
            'label'    => '自定义文本内容',
            'section'  => 'target_page_custom_section',
            'type'     => 'text',
        ) );
    }
}

关键说明

  1. 获取预览页面ID:通过$_GET['url']拿到定制器当前预览的页面URL,再用url_to_postid()转换为页面ID,这是定制器环境下识别当前预览页面的正确方式。
  2. 避免PHP警告:先初始化$current_preview_id为0,再进行赋值判断,就能消除变量未定义的警告。
  3. 切换页面需刷新:在定制器中切换预览页面后,需要刷新定制器界面,才能加载对应页面的专属设置——因为customize_register钩子仅在定制器初始化时触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:05:55