簡體   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