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

如何在自定义WordPress菜单页中添加全局设置页面?

当然可以实现!

你已经成功创建了顶级菜单,接下来只需要把设置功能整合进去,让管理员可以管理企业社交媒体地址,并且这些设置能全局调用。下面是完整的实现方案,分步骤帮你搞定:

1. 完善菜单注册并添加设置相关的初始化逻辑

首先修正你现有的菜单注册代码,同时添加设置的注册逻辑(WordPress推荐用register_setting来管理设置,它会自动处理保存、验证和安全校验):

function company_register_menu() {
    // 创建顶级菜单
    add_menu_page(
        __( 'Company Settings', 'company' ), // 页面标题
        __( 'Company', 'company' ), // 菜单名称
        'manage_options', // 权限(管理员权限用manage_options最合适)
        'company-menu', // 菜单slug
        'company_settings_page', // 页面回调函数
        'dashicons-admin-generic', // 菜单图标
        6 // 菜单位置
    );

    // 注册设置组和字段
    add_action( 'admin_init', 'company_register_settings' );
}
add_action( 'admin_menu', 'company_register_menu' );

// 注册设置
function company_register_settings() {
    // 注册一个设置组,名称为company_social_settings
    register_setting(
        'company_social_settings', // 设置组名称
        'company_social_links', // 存储设置的option键名
        array(
            'sanitize_callback' => 'company_sanitize_social_links', // 数据清洗回调
            'default' => array() // 默认值
        )
    );

    // 添加设置节(用来分组字段,这里我们只需要一个节)
    add_settings_section(
        'company_social_section', // 节ID
        __( 'Social Media Links', 'company' ), // 节标题
        'company_social_section_desc', // 节描述回调
        'company-menu' // 关联的菜单slug
    );

    // 添加具体的设置字段,这里先加几个常用的,你可以按需扩展
    add_settings_field(
        'company_facebook', // 字段ID
        __( 'Facebook URL', 'company' ), // 字段标签
        'company_social_field_callback', // 字段渲染回调
        'company-menu', // 关联的菜单slug
        'company_social_section', // 关联的节
        array( 'key' => 'facebook' ) // 传递给回调的参数
    );

    add_settings_field(
        'company_twitter',
        __( 'Twitter/X URL', 'company' ),
        'company_social_field_callback',
        'company-menu',
        'company_social_section',
        array( 'key' => 'twitter' )
    );

    add_settings_field(
        'company_linkedin',
        __( 'LinkedIn URL', 'company' ),
        'company_social_field_callback',
        'company-menu',
        'company_social_section',
        array( 'key' => 'linkedin' )
    );
}

2. 实现各种回调函数

接下来需要写刚才注册的几个回调函数,用来渲染页面、节描述和字段:

// 菜单页面的主回调:渲染设置表单
function company_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You do not have sufficient permissions to access this page.', 'company' ) );
    }
    ?>
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form method="post" action="options.php">
            <?php
            // 输出设置组的隐藏字段(安全校验用)
            settings_fields( 'company_social_settings' );
            // 输出所有设置节和字段
            do_settings_sections( 'company-menu' );
            // 保存按钮
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

// 设置节的描述回调
function company_social_section_desc() {
    echo '<p>' . __( 'Enter your company\'s social media URLs below. These links will be available site-wide.', 'company' ) . '</p>';
}

// 单个社交字段的渲染回调
function company_social_field_callback( $args ) {
    $social_links = get_option( 'company_social_links', array() );
    $key = $args['key'];
    $value = isset( $social_links[$key] ) ? esc_url( $social_links[$key] ) : '';
    ?>
    <input type="url" name="company_social_links[<?php echo esc_attr( $key ); ?>]" value="<?php echo esc_attr( $value ); ?>" class="regular-text">
    <?php
}

// 数据清洗回调:确保输入的是合法URL
function company_sanitize_social_links( $input ) {
    $sanitized = array();
    foreach ( $input as $key => $value ) {
        if ( ! empty( $value ) ) {
            $sanitized[$key] = esc_url_raw( $value );
        }
    }
    return $sanitized;
}

3. 全局调用设置值

现在设置已经可以保存了,你可以在主题或插件的任何地方用下面的代码获取社交媒体链接:

// 获取所有社交链接
$company_social_links = get_option( 'company_social_links', array() );

// 输出单个链接示例(比如在页脚)
if ( ! empty( $company_social_links['facebook'] ) ) {
    echo '<a href="' . esc_url( $company_social_links['facebook'] ) . '" target="_blank">Facebook</a>';
}

额外说明

  • 权限控制:我用了manage_options权限,只有管理员能修改这些设置,如果你需要给其他角色权限,可以调整这个参数。
  • 扩展字段:如果需要添加更多社交媒体平台,只需要复制add_settings_field的代码,修改对应的key和标签即可。
  • 安全:代码里用了esc_url、esc_attr、esc_url_raw等函数确保输出和存储的安全性,这是WordPress开发的最佳实践。

这样你就拥有了一个完整的、在自己创建的菜单下的社交媒体设置页面,所有设置全局生效,管理员可以轻松修改!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:30