Barra di amministrazione di WordPress Navigazione Bootstrap Twitter sovrapposta [chiuso]


10

Sto riscontrando un problema con la barra di amministrazione di WordPress che si sovrappone alla 2.3.0barra di navigazione Twitter Bootstrap ( ). Ho provato questa correzione:

body.admin-bar .navbar-fixed-top {
    top: 28px;
}

.navbar .brand {
    color: #000 !important;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 30px
        rgba(255, 255, 255, 0.125);
    font-weight: bold !important;
}

.nav-container {
    padding-left: 0;
    padding-right: 0;
}

.nav-tabs, .nav-pills {
    margin-top: -6px;
}

.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a
    {
    color: #fff !important;
}

#inner-header {
    width: 100%;
}

input,textarea,select,.uneditable-input {
    margin-bottom: 0;
}

.navbar-form,.navbar-search {
    margin: 0 0 9px;
}

.navbar-search {
    padding-left: 0;
}

#s {
    width: 100px;
}

ma purtroppo sta ancora ponendo un problema. Mi chiedo quali correzioni sono disponibili?

Risposte:


17

Come impedire la sovrapposizione della barra di amministrazione di WordPress con la barra di navigazione Twitter Bootstrap.

In risposta a: barra di amministrazione di WordPress che si sovrappone alla navigazione di bootstrap di Twitter

Chiesto da: @TheWebs

Se stai usando Twitter Bootstrap con WordPress e hai un problema con la barra di amministrazione di WordPress che si sovrappone alla barra di navigazione, probabilmente sei piuttosto frustrato con alcune di queste risposte. Ho cercato soluzioni ovunque prima di decidere infine di passare a una marcia inferiore e trovare una soluzione che fa esattamente ciò di cui ho bisogno.

Quindi, ecco una risposta che non nasconde la barra di amministrazione di WordPress o sposta la barra di amministrazione di WordPress nella parte inferiore delle pagine. Questa risposta manterrà la barra di amministrazione di WordPress proprio dove appartiene ... Nella parte superiore delle tue pagine.

Si prega di notare che questo richiederà alcuni brevi passaggi per il completamento, ma ne vale la pena. Non è davvero un processo complicato o che richiede tempo. Volevo solo assicurarmi che la spiegazione su come farlo fosse chiara e facile da seguire / capire.


Passo 1

I temi hanno un tag modello per il body tag che aiuterà gli autori di temi a modellare in modo più efficace con i CSS. Viene chiamato il tag modello body_class. Questa funzione offre all'elemento body classi diverse e può essere aggiunta, in genere, nel header.phptag body HTML dell'elemento .

  1. Apri il tuo tema WordPress attualmente attivo usando la directory Bootstrap di Twitter. Trova header.phpe aprilo.
  2. Trova <body> .
  3. Sostituirlo con <?php echo '<body class="'.join(' ', get_body_class()).'">'.PHP_EOL; ?>

Dopo aver completato i tre passaggi precedenti, ora hai abilitato correttamente il tuo tema WordPress con le classi del corpo di WordPress.

Passaggio 2 (OPZIONALE!)

  • Aggiungi classi CSS condizionali personalizzate al <body>tag.

Per impostazione predefinita, WordPress fornisce già un elenco di classi predefinite al tag HTML, se si utilizzano le funzioni body_class()o get_body_class().

Se visualizzi il codice sorgente di qualsiasi pagina front-end renderizzata sul tuo sito Web WordPress, noterai che due delle classi CSS aggiunte automaticamente al <body>tag HTML sono "login" e "admin-bar".

Noterai anche che i nomi delle classi CSS vengono aggiunti al <body>tag HTML solo se l'utente ha effettuato l'accesso, altrimenti non verranno aggiunti al <body>tag HTML .

Quindi, se non si desidera utilizzare i nomi di classe CSS predefiniti di WordPress, è possibile aggiungere i propri molto facilmente.

  1. Apri il tuo tema WordPress attualmente attivo usando la directory Bootstrap di Twitter. Trova functions.phpe aprilo.
  2. Aggiungi add_filter('body_class', 'mbe_body_class'); all'inizio del file.
  3. Aggiungi il seguente codice, nella parte inferiore del file.

Il codice:

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

Ora, se visualizzi il codice sorgente di qualsiasi pagina front-end renderizzata sul tuo sito Web WordPress, se l'utente ha effettuato l'accesso, vedrai "body-login-in" è stato aggiunto al <body>tag HTML e se l'utente è disconnesso, vedrai "body-log-out" è stato aggiunto al <body>tag HTML .

Passaggio 3

  • Aggiungi il codice CSS al tuo tema.

Questa è la sezione di codice che correggerà il tuo tema per visualizzare sia la barra di amministrazione di WordPress, sia la tua navigazione Bootstrap di Twitter, indipendentemente dal fatto che l'utente sia connesso o disconnesso dal tuo sito web.

  1. Apri il tuo tema WordPress attualmente attivo usando la directory Bootstrap di Twitter. Trova functions.phpe aprilo.
  2. Aggiungi add_action('wp_head', 'mbe_wp_head'); all'inizio del file.
  3. Aggiungi il seguente codice, nella parte inferiore del file.

Il codice:

function mbe_wp_head(){
    echo '<style>'.PHP_EOL;
    echo 'body{ padding-top: 70px !important; }'.PHP_EOL;
    // Using custom CSS class name.
    echo 'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    // Using WordPress default CSS class name.
    echo 'body.logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}

MODIFICA AL CODICE

add_action('wp_head', 'mbe_wp_head');
function mbe_wp_head(){
    echo '<style>'
    .PHP_EOL
    .'body{ padding-top: 70px !important; }'
    .PHP_EOL
    .'body.body-logged-in .navbar-fixed-top{ top: 46px !important; }'
    .PHP_EOL
    .'body.logged-in .navbar-fixed-top{ top: 46px !important; }'
    .PHP_EOL
    .'@media only screen and (min-width: 783px) {'
    .PHP_EOL
    .'body{ padding-top: 70px !important; }'
    .PHP_EOL
    .'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'
    .PHP_EOL
    .'body.logged-in .navbar-fixed-top{ top: 28px !important; }'
    .PHP_EOL
    .'}</style>'
    .PHP_EOL;
}

Questa versione della funzione mbe_wp_head include una query multimediale mobile-first, per garantire che l'intestazione venga spostata verso il basso alla distanza corretta. Per i dispositivi mobili, la barra di amministrazione di WP è alta 48 px. Dopo il breakpoint di 783 px, la barra di amministrazione si riduce a soli 28 px di altezza.

Ecco qui. Se l'utente ha effettuato l'accesso, ora dovresti avere la barra di amministrazione di WordPress nella parte superiore della pagina, immediatamente seguita dalla navigazione Twitter Bootstrapped. Se l'utente è disconnesso dal tuo sito Web WordPress, la navigazione Bootstrap di Twitter dovrebbe comunque essere visualizzata in modo appropriato nella parte superiore del sito Web.


1
Perché non hai inserito il CSS in style.css per esempio, invece di inserirlo nel HTML? Sarebbe una soluzione più elegante. Grazie anche per il tuo lavoro e l'idea!
Max Ruf,

@MaxRuf Hai perfettamente ragione. Separare il file CSS accodato sarebbe meglio. Stavo solo pensando alle persone che hanno trovato questo post, quindi potevano semplicemente copiare / incollare. Meno probabilità di incontrare problemi.
Michael Ecklund,

25

Non ha funzionato per me, ma ho trovato una bella soluzione. Nel tuo header.php usa la funzione wordpress per interrogare se viene visualizzata la barra degli strumenti, quindi crea un div vuoto sotto il div della barra di navigazione:

<div class="navbar navbar-inverse navbar-fixed-top">
<?php 
  // Fix menu overlap
  if ( is_admin_bar_showing() ) echo '<div style="min-height: 32px;"></div>'; 
?>
<div class="navbar-inner">

Ottima soluzione. Mi piace il fatto che sia molto più semplice della risposta accettata e che cerchi is_admin_bar_showing(), non solo se l'utente ha effettuato l'accesso, il che è positivo considerando che qualcuno potrebbe aver effettuato l'accesso, ma ha disattivato la barra di amministrazione. Grazie!
Mark Rummel,

3
A partire da WordPress 3.8, l'altezza della barra di amministrazione è di 32 px.
Cowgill,

Questo è un po 'Hacky ma ho trovato che questa è la soluzione migliore. Eseguito l'upgrade
plushyOggetto

Soluzione leggermente modificata che utilizza la logica ternaria e uno stile in linea:<nav class="navbar navbar-default navbar-fixed-top"<?php echo (is_admin_bar_showing()) ? ' style="top: 32px;"' : ''; ?>>
Mark Rummel,

1
Questo è buono tranne che su un dispositivo mobile l'offset non è di 32 px ma 46 px. Per tenere conto di ciò, ho usato una classe CSS anziché uno stile. Ecco la classe che può essere applicata:.fix_wp_overlap { min-height: 32px; } @media screen and (max-width: 782px) { .fix_wp_overlap { top: 46px !important; } }
surfbuds

3

puoi provare questo:

   .navbar-fixed-top { top: 0px; }
    body.admin-bar .navbar-fixed-top { top: 28px !important; }

se questo funziona per te (cosa che dovrebbe!), allora dovrai spostare la barra di amministrazione di wp in basso attaccando il codice qui sotto in una cartella di plugin o nel tuo file Functions.php:

function fb_move_admin_bar() {
    echo '
    <style type="text/css">
    body { 
    margin-top: -28px;
    padding-bottom: 28px;
    }
    body.admin-bar #wphead {
       padding-top: 0;
    }
    body.admin-bar #footer {
       padding-bottom: 28px;
    }
    #wpadminbar {
        top: auto !important;
        bottom: 0;
    }
    #wpadminbar .quicklinks .menupop ul {
        bottom: 28px;
    }
    </style>';
}
// on backend area
add_action( 'admin_head', 'fb_move_admin_bar' );
// on frontend area
add_action( 'wp_head', 'fb_move_admin_bar' );

in alternativa puoi usare questo plugin

non mi piace molto usare i plugin perché la maggior parte del tema carica il mio script con codici fasulli che non mi servono ... la soluzione 1 e 2 sopra funziona bene, ma se non funziona per te, puoi provare la soluzione 3 di seguito:

function stick_admin_bar_to_bottom_css() {
echo "

html {
padding-bottom: 28px !important;
}

body.admin-bar {
margin-top: -28px;
}

#wpadminbar {
top: auto !important;
bottom: 0;
}

#wpadminbar .quicklinks .menupop ul {
bottom: 28px;
}

";
}

add_action('admin_head', 'stick_admin_bar_to_bottom_css');
add_action('wp_head', 'stick_admin_bar_to_bottom_css');

Sembrava che funzionasse bene per me senza i problemi di 28px ...


2

Non ha funzionato per me fino a quando non ho aggiunto questo al tag body:

<body <?php body_class(); ?>>

Quindi ha funzionato bene!


0

Perfetto! Proprio quello che stavo cercando, tuttavia, ho fatto qualcosa di leggermente diverso nel passaggio 3. Non sono sicuro che sia importante, ma il mio codice è simile a questo ...

    function mbe_wp_head(){
    echo '<style>'.PHP_EOL;
    echo 'body{ padding-top: 70px !important; }'.PHP_EOL;
    // Using custom CSS class name.
    echo 'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    // Using WordPress default CSS class name.
    echo 'body.logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}
add_action('wp_head', 'mbe_wp_head');

Hai menzionato l'aggiunta in diversi posti, ma l'ho sempre fatto in questo modo e sembra funzionare bene. Grazie per la correzione!


1
E cosa hai fatto esattamente di diverso?
Kaiser

0

Correzione di Bootstrap 'navbar-fixed-top' per impedire la sovrapposizione del menu del sito con il menu di amministrazione di WordPress

.admin-bar .navbar-fixed-top { top:46px; @media screen and (min-width:782px) { top:32px; } }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.