繁体   English   中英

根据用户角色和页面显示 header (Wordpress)

[英]Display header based on user role and page (Wordpress)

我使用 Elementor 创建了多个不同的标题作为模板。

我想根据用户角色(登录/注销)和页面显示所有不同的标题。

我正在寻找一个可以轻松自定义的代码片段,以便为不同的场景分配所有不同的标题。

有人可以创建一个示例代码片段,它将:

  • 整个网站上为已注销的用户显示 header A ,但页面 X 和 Y除外。
  • 整个网站上的登录用户显示 header B除了页面 X 和 Y。
  • 仅在页面 X 和 Y上为注销的用户显示 header C
  • 仅在页面 X 和 Y上为登录用户显示 header D

这样,人们可以轻松地复制代码并对其进行自定义以满足他们的需求。


编辑

有两个地方可以创建模板。

第一个由 Elementor 添加,位于Admin > Templates > Saved Templates中。 在这里,我可以创建部分或页面模板(截图)。

第二个是由我的主题 OceanWP 添加的,位于Admin > Theme Panel > My Library 在这里我只能创建一种类型的模板。 此处创建的模板稍后可以作为自定义页眉或页脚分配给单个页面或整个网站。

在这两个地方创建的模板是否被视为模板部分? 我选择创建 header 模板的地方有什么不同吗?

这是我创建的 header 模板的列表:

模板标题 帖子编号
一个 主 Header (登出) 5448
主Header(已登录) 6714
C 结帐 Header(注销) 6724
D 结帐 Header(登录) 3960

这是我希望拥有与整个网站不同的 header 的页面:

页面标题 帖子编号 蛞蝓
X 查看 18 查看

像这样的东西应该工作:

<?php

if (! is_user_logged_in() && ! is_page(array( 'page-x-slug', 'page-y-slug' ))){
  // display header A
}

if (is_user_logged_in() && ! is_page(array( 'page-x-slug', 'page-y-slug' ))){
  // display header B
}

if (! is_user_logged_in() && is_page(array( 'page-x-slug', 'page-y-slug' ))){
  // display header C
}

if (is_user_logged_in() && is_page(array( 'page-x-slug', 'page-y-slug' ))){
  // display header D
}

?>

以下提供与前一个答案相同的结果,但被缩小并且重复性较低。

<?php
if ( is_page( [ 'page-x', 'page-y' ] ) )
    if ( is_user_logged_in() ) 
        get_header( 'B' ); //... header-B.php
    else 
        get_header( 'A' ); //... header-A.php
else
    if ( is_user_logged_in() ) 
        get_header( 'D' ); //... header-D.php
    else 
        get_header( 'C' ); //... header-C.php
?>

关注您的评论

我猜你所说的...

部分模板

...实际上是模板的一部分。 而不是使用get_header( string $name ); 然后,您将使用get_template_part( string $slug, string $name = null ); .

$slug$name可以是您选择的任何内容。

例如, section-A.php将是get_template_part( 'section', 'A' ); .

<?php
//...
if ( is_user_logged_in() ) 
        get_template_part( 'section', 'B' ); //... section-B.php
    else 
        get_template_part( 'section', 'A' ); //... section-A.php
?>

关于指定页面和模板。 is_page()可以采用 ID、slug 或标题。

is_page(int|string|int[]|string[] $page = '' )

范围 描述
$page (int|string|int[]|string[]) (可选)要检查的页面 ID、标题、slug 或数组。 默认值: ''

但你也可以使用其他is_is_search()is_archives() , is_404() ...等。

这是完整列表@ https://codex.wordpress.org/Conditional_Tags

如果要添加多个条件语句,可以在中间添加elseif语句。

<?php
if ( is_page( [ 'page-x', 'page-y' ] ) )
    //...

elseif ( is_search() || is_archive() )
    //...

else
    //...
?>

如果您想更好地了解 PHP 运算符,它们是如何构建条件语句的,请查看 @ https://www.w3schools.com/php/php_operators.asp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM