如何防止 WordPress 管理列與 Twitter Bootstrap 導覽列重疊

WordPress 的管理列 ( Admin Bar )

WordPress 的管理列 ( Admin Bar )是在登入後會自動產生在最上面。但是與 Twitter Bootstrap 網頁的導覽列重疊,下面的方法可以解決這樣的問題。

step 1: 添加 get_body_class(); 到佈景主題( Theme )的 <body>。

網頁都會有一個 body 標籤,佈景主題 ( Theme ) 通常將它拆分到 header.php 的 HTML body 標記中。打開目前啟用的佈景主題 ( Theme ) 的 header.php 檔案,將 <body> 置換程下列的程式

<?php echo '<body class="'.join(' ', get_body_class()).'">'.PHP_EOL; ?>

step 2(選項): 將自訂條件 CSS 類別新增至標籤。

預設情況下,如果您使用 get_body_class() 函數,WordPress 會自動幫您將 HTML 標記提供預設類別。如果您查看 WordPress 網站上任何呈現的前端頁面的原始程式碼,您會注意到自動新增至 HTML 標籤的兩個 CSS 類別是「logged-in」和「admin-bar」。

如果使用者登錄後,這些 CSS 類別名稱只會新增到 HTML 標籤中,如果您不想使用預設的 WordPress CSS 類別名稱,也可以在 function.php 中加入下列的函數來新增自己的類別名稱。

add_filter('body_class', 'zenblog_body_class');
function zenblog_body_class($classes){
    if(is_user_logged_in()){
        $classes[] = 'body-logged-in';
    } else{
        $classes[] = 'body-logged-out';
    }
    return $classes;
}

現在,如果已登錄 WordPress,您可以查看 WordPress 網站上的前端頁面 HTML代碼,,您將看到“body-logged-in”已添加到 HTML 標記中,並且如果用戶登出後,您將看到“body-logged-out”已新增至HTML 標籤中。

Step 3: 將 CSS 程式碼新增到佈景主題中(Add the CSS code to your theme)

function zenblog_wp_head(){
    echo '<style>'.PHP_EOL;    
    // 如果您使用 step 2(選項)即加入下行 Using custom CSS class name.
    echo '.body-logged-in { top: 28px !important; }'.PHP_EOL;
    // 如果您使用 WordPress 預設的 CSS 即加入下行 Using WordPress default CSS class name.
    echo '.logged-in.admin-bar { top: 28px !important; }'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}

現在您應該在頁面的最頂部看到 WordPress 管理欄 ( Admin Bar ),緊接著是 Twitter Bootstrap 導航。 如果使用者登出您的 WordPress 網站,您的 Twitter Bootstrap 導覽仍應正確顯示在您網站的頂部。

Step 4: 手機上時的顯示

在手機上查看時,它的 ( Admin Bar ) 高度是 46px ,且顯示劃面應該小於 762px 才適用,所以將 Step 3 的程式改為下列即可。

/**
 * 登入後在前端網頁下移 28px, 讓 Admin Bar 顯示
 */
add_action('wp_head', 'zenblog_wp_head');
function zenblog_wp_head(){
  echo '<style>'.PHP_EOL;
  echo '@media screen and (max-width: 762px) {'.PHP_EOL;  
  echo '.logged-in.admin-bar { top: 46px !important; }'.PHP_EOL;
  echo '.header.sticked { top: 0px !important; }}'.PHP_EOL;
  // Using WordPress default CSS class name. 平板&電腦
  echo '@media screen and (min-width: 763px) {'.PHP_EOL;  
  echo '.header.sticked { top: 0px !important; }'.PHP_EOL;
  echo '.logged-in.admin-bar { top: 28px !important; }}'.PHP_EOL;
  
  echo '</style>'.PHP_EOL;
}

參考: How to prevent the WordPress admin bar from overlapping with your Twitter Bootstrap navigation bar.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *