主页/WordPress笔记/博客文章/综合文章/如何在 WordPress 中向已登录的用户显示不同的菜单

如何在 WordPress 中向已登录的用户显示不同的菜单

Bug编译狮

Bug编译狮

在 WordPress 中,你可以通过多种方式来向已登录的用户展示不同菜单。最常见的方式是使用 wp_nav_menu() 函数结合条件判断(如 if 语句)来动态生成不同的导航条。这种方法允许你在特定页面或位置显示不同的菜单项。

示例代码

假设我们有一个名为 “custom-menu” 的菜单,我们需要根据当前页面的 URL 来决定是否显示该菜单项。我们将创建一个简单的函数来实现这一点:

function display_custom_menu($current_page_url) {
    // 获取当前菜单
    $menu = wp_get_nav_menu_object('custom-menu');

    if (is_front_page()) { // 如果当前页面是首页
        echo '<ul class="main-nav">';
        echo '<li><a href="' . home_url() . '">Home</a></li>';
        echo '</ul>';
    } elseif (is_single()) { // 如果当前页面是单页
        echo '<ul class="single-page-nav">';
        echo '<li><a href="' . get_permalink() . '">Single Page</a></li>';
        echo '</ul>';
    } else {
        // 否则显示默认菜单
        echo '<ul class="default-nav">';
        echo '<li><a href="' . home_url() . '">Home</a></li>';
        echo '<li><a href="' . site_url('/about/') . '">About Us</a></li>';
        echo '</ul>';
    }
}

在这个示例中,我们首先检查当前页面是否为首页 (home_url)、单页 (get_permalink) 或其他任何情况。然后,我们根据这些条件动态生成相应的菜单项。

使用步骤

  1. 添加菜单:确保在 WordPress 管理面板中已经创建了一个名为“custom-menu”的菜单。
  2. 修改模板文件:在你想要应用这个功能的页面或位置,找到并编辑对应的模板文件(如 page.php, single.php 等)。在这些文件中插入上述代码。
  3. 测试:保存更改后,访问页面查看新菜单是否按预期显示。

效果

当你浏览网站时,如果当前页面是首页或单页,系统会自动加载并显示相应的导航条;否则,系统会加载默认的导航条。

通过这种方式,你可以灵活地根据用户的访问路径调整网站的布局和信息呈现方式,提高用户体验。

黑板前的Bug语法讲师

黑板前的Bug语法讲师

如何在 WordPress 中向已登录的用户显示不同的菜单

在 WordPress 中,通过设置和管理用户权限可以实现不同级别的管理员、编辑者和其他角色之间的权限划分。这些角色通常用于控制对网站内容的访问方式,如发布文章、评论、修改页面等。

1. 管理用户账户

首先,我们需要创建并管理用户的账号。这可以通过 wp_users 表格来完成,其中包含用户的基本信息以及他们是否具有特定功能(例如编辑模式)的信息。

CREATE TABLE wp_users (
    id int(10) unsigned NOT NULL AUTO_INCREMENT,
    user_login varchar(255) DEFAULT NULL,
    user_email varchar(255) DEFAULT NULL,
    user_pass varchar(255) DEFAULT NULL,
    user_nicename varchar(45) DEFAULT NULL,
    user_url varchar(255) DEFAULT NULL,
    user_registered datetime DEFAULT NULL,
    user_activation_key varchar(255) DEFAULT NULL,
    user_status int(11) DEFAULT '0',
    last_login datetime DEFAULT NULL,
    login_count int(11) DEFAULT '0',
    user_ip varchar(45) DEFAULT NULL,
    user_email_verified int(1) DEFAULT '0',
    user_email_last_verified datetime DEFAULT NULL,
    user_password_reset int(1) DEFAULT '0',
    user_password_reset_key varchar(255) DEFAULT NULL,
    user_password_reset_code varchar(255) DEFAULT NULL,
    PRIMARY KEY (id)
);

2. 设置管理员级别

为了使某些用户能够拥有更高的权限,比如发布文章或评论,可以在 wp_usermeta 表中添加额外的字段来标识每个用户的权限。

ALTER TABLE wp_usermeta ADD meta_value VARCHAR(255);

然后为每个角色分配相应的值:

  • admin – 代表最高权限,可以执行任何操作。
  • editor – 允许查看、编辑部分页面。
  • author – 只允许作者看到自己的作品。
  • subscriber – 其他未授权用户。

3. 向已登录用户显示不同的菜单

要根据用户的角色显示不同的菜单,可以使用 WP_User__Role 类型的自定义标签。这个类提供了与当前用户关联的所有角色列表。

function my_menu() {
    global $wp_roles;
    $roles = get_role('subscriber');
    if ($roles->has_cap('edit_posts')) {
        add_menu_page('Admin Menu', 'Menu', 'manage_options', 'admin.php?page=my_admin_page', 'my_function', 'dashicons-admin-tools');
    } else {
        add_menu_page('Non-Admin Menu', 'Menu', 'manage_options', 'non_admin_page', 'non_function', 'dashicons-admin-tools');
    }
}

add_action('admin_menu', 'my_menu');

在这个例子中:

  • 我们创建了一个名为 my_admin_page 的页面,它将被用于显示高级管理选项。
  • 当一个用户尝试访问 admin.php?page=my_admin_page 时,他们的身份验证检查会失败,因为它们没有足够的权限。
  • 相反,当他们尝试访问 non_admin_page 时,他们的身份验证检查会成功,因为他们有足够的权限。

4. 示例代码:添加自定义标签

class WP_Customize_Control extends WP_Customize_Control {

    public function __construct($id, $label = null, array $attributes = []) {
        parent::__construct($id, $label, $attributes);
    }

    public function render_content() {
        echo '<style type="text/css">';
        echo '.custom-control-label { display: none; }';
        echo '</style>';
        echo '<div class="customize-control customize-control-' . esc_attr($this->get_control_id()) . '">' . $this->render_label() . $this->render_input();
    }

}

5. 示例代码:添加自定义标签到菜单

function add_custom_menu_items() {
    register_nav_menus(array(
        'primary' => 'Primary Navigation',
        'secondary' => 'Secondary Navigation'
    ));
}
add_action('init', 'add_custom_menu_items');

function set_custom_menu_item_visibility() {
    if (is_user_logged_in()) {
        // 检查当前用户是否有足够权限访问此菜单
        if (current_user_can('edit_posts')) {
            // 如果有权限,则启用该菜单项
            remove_menu_page('edit.php?post_type=page&paged=1'); // 假设这是您希望禁用的菜单项
        }
    }
}
add_action('settings_init', 'set_custom_menu_item_visibility');

以上就是使用 WordPress 来向已登录的用户显示不同菜单的方法。通过这种方式,您可以有效地限制用户对网站的不同部分的访问,从而更好地保护您的站点免受未经授权的更改。