2 verschiedene header für wp (Seiten)

  • Hi Forum,

    ich benutze das Kubrick- Theme und würde gerne 2 verschiedene Header benutzen. Je nachdem, welche der Seiten man anklickt sollte jeweils der eine oder der andere angezeigt werden.

    Ich habe 8 Seiten + die main- page. 3 Seiten + die main- page sollen Header A bekommen, die anderen 5 Seiten Header B.


    Ich hoffe, dass ich mich verständlich ausgedrückt habe ... :grin:

    Vorab vielen Dank

    eltorte

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Das kannst Du mit einer kleinen Modifikation am Theme recht leicht umsetzen. Kennst Du Dich denn ein wenig mit PHP aus?

    Grundsätzlich würde ich sagen gibst Du den Seiten, die Header A kriegen sollen, ein benutzerdefiniertes Feld, meinetwegen "headerA=true" oder so. In der header.php prüfst Du dann auf is_page und wenn ja, dann prüfst Du, ob das Feld gesetzt ist. Falls ja, kriegt die Seite eine andere Header-Klasse, welche dann per CSS ein anderes Bild oder sonstiges Aussehen kriegt. Für die Startseite kann das fest im Theme umgesetzt werden: In der header.php prüfen auf is_home (hm, es gab verschiedene, mindestens is_home und is_start_page, Du müsstest mal im Codex nachschlagen welches davon für Dich die richtige Abfrage ist).

  • Das kannst Du mit einer kleinen Modifikation am Theme recht leicht umsetzen. Kennst Du Dich denn ein wenig mit PHP aus?

    Grundsätzlich würde ich sagen gibst Du den Seiten, die Header A kriegen sollen, ein benutzerdefiniertes Feld, meinetwegen "headerA=true" oder so. In der header.php prüfst Du dann auf is_page und wenn ja, dann prüfst Du, ob das Feld gesetzt ist. Falls ja, kriegt die Seite eine andere Header-Klasse, welche dann per CSS ein anderes Bild oder sonstiges Aussehen kriegt. Für die Startseite kann das fest im Theme umgesetzt werden: In der header.php prüfen auf is_home (hm, es gab verschiedene, mindestens is_home und is_start_page, Du müsstest mal im Codex nachschlagen welches davon für Dich die richtige Abfrage ist).


    danke für die Antwort. :)

    Es war leider etwas zu schnell und zu komprimiertes Wissen.

    Ich habe jetzt allen Seiten, die A als Header benutzen sollen ein Benutzerdefiniertes Feld zugewiesen. Ab da wird es etwas undurchsichtig für mich.

    Könntest du da etwas ausfürhlicher werden.

  • Zitat

    Ich habe jetzt allen Seiten, die A als Header benutzen sollen ein Benutzerdefiniertes Feld zugewiesen. Ab da wird es etwas undurchsichtig für mich. Könntest du da etwas ausfürhlicher werden.

    Gerne. Hatte gestern nicht so die Zeit, das ausführlicher aufzuschreiben.

    Ok, also folgendes kommt oben in die header.php des Themes, in einen PHP-Block. Hm... Was hast Du denn als Feldwert gesetzt? Wenn es ein Feld ist, das nur per true/false anzeigt, dass die Seite den anderen Header kriegen soll, dann müsste das so aussehen (korrekten Feldnamen ersetzen und CSS-Klassenname!):

    PHP
    $my_header_class = '';
    if (is_page()) {
      $my_has_custom_header = get_post_meta($id, 'FELDNAME', true);
      $my_header_class = ($my_has_custom_header == 'true') ? 'CSS-KLASSENNAME' : '';
    }

    Wenn Du da direkt den Klassennamen reingeschrieben hast (um z.B. auch verschiedene Header zu ermöglichen), dann so (ebenfalls Feldname ersetzen!):

    PHP
    $my_header_class = '';
    if (is_page()) {
      $my_header_class = get_post_meta($id, 'FELDNAME', true);
    }

    Was Du mit dem Klassennamen jetzt anstellst, kommt drauf an, wie genau der aktuelle Header aufgebaut ist. Im Default-Theme könnte man das z.B. so einbauen:

    PHP
    <div id="header" class="<?php print $my_header_class; ?>">
        <div id="headerimg">
            <h1><a rel="nofollow" href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
            <div class="description"><?php bloginfo('description'); ?></div>
        </div>
    </div>

    Und dann muss das in der style.css natürlich noch eingetragen werden. Auch das kommt drauf an, wie es aktuell umgesetzt ist, sollte sich aber finden lassen. Wenn z.B. aktuell eine Angabe für "#header ..." im Stylesheet steht, schreibst Du einfach darunter "#header.CSS-KLASSENNAME ..." und kannst darin dann ändern, ergänzen und überschreiben was Du magst (ohne die Anführungsstriche natürlich und mit dem oben vergebenen Klassennamen).

  • ganz anders, nur als idee, ohne extra felder, aber braucht die IDs der seiten:

    in header.php aendern (default theme):

    PHP
    <div id="header" role="banner" <?php if(is_page) { $pid = get_the_ID(); if(in_array($pid,array('2','119','403','174'))) { echo ' class="header_B"'; } ; } ?>>


    '2','119','403','174' sind durch die IDs der seiten mit anderem headerbild zu ersetzen (die gruppe ohne die index.php).

    style (nach dem normalen style von #header einfuegen):

    Code
    #header.header_B {
     background: #73a0c5 url('images/kubrickheader_B.jpg') no-repeat bottom center;
     }



    vorteil:
    keine benutzer definierten felder;
    nachteil:
    bei neuen seiten mit anderem header muss eine templatedatei geaendert werden.

    ------------------------------
    oder noch anders:
    body_class() im <body> tag verwenden; und die verschiedenen classes (zB .page-slug) dann fuer den style von header verwenden:

    Code
    .page-impressum #header { background: ...... }
    .page-diese-extra-seite #header { background: ...... }
    .page-noch-eine-seite #header { background: ...... }



    was nach 'page-' kommt ist die 'page slug' des seitentitels; benoetigt eine aenderung in der style.css fuer jede neue seite mit dem anderen headerbild.

  • finde das extrem aufwändig, was ihr da macht. Habe die page.php kopiert, ihr einen neuen namen gegeben, oben zusätzlich

    Zitat

    <?php /* Template Name: leistung */

    z.B. für die leistung.php eingegeben und wähle dann nur noch entsprechend rechts das template aus. Also statt "Standardtemplate". und hier vergebe ich das bild, das ich möchte.

  • gericoach:
    im prinzip ist das ein machbarer weg, einige seiten gezielt und verschieden anzusprechen.

    das bild hier ist aber ein hintergrundbild im div #header, das im header.php geoeffnet wird.
    (ist ja fuer das default theme)

    wie waere denn zB der code in deiner methode, das bild da zu vergeben?

  • Hmm, da habe ich wohl das Kubrik Theme nicht richtig analysiert...
    Bei mir ist das simpel gelöst, Beispiel für die Seite "wohnungen":

  • In dem Fall führen viele Wege nach Rom. Sorry wenn ich da schon gleich wieder zu kompliziert gedacht habe. ;-)

    Seitentemplate geht natürlich genauso und dann da oben eine Variable setzen und die in der header.php auswerten statt des benutzerdefinierten Feldes. Oder wie alchymyth vorschlägt einfach immer Klassen passend zum Slug vergeben und die in den Stylesheets ansprechen. Kommt immer etwas auf den Einsatzzweck an, aber letzteres ist vielleicht mit die schönste Lösung. Mit IDs würde ich eher nicht rumhantieren. Macht sich schlecht wenn man parallel ein Testsystem hat, dann muss man da die IDs immer noch synchron halten.

  • , aber letzteres ist vielleicht mit die schönste Lösung. Mit IDs würde ich eher nicht rumhantieren. Macht sich schlecht wenn man parallel ein Testsystem hat, dann muss man da die IDs immer noch synchron halten.


    erst mal vielen Dank an euch alle, für die Antworten.

    wenn ich das richtig verstanden habe, scheint die dritte Lösung die einfachste zu sein.

    Also kopiere ich die page.php x-mal (soviel seiten wie ich habe), benenne sie um und sage ihnen, welches header- bild sie nehmen sollen.

    das werd ich gleich mal versuchen ...


    vielen Dank :grin:

    Einmal editiert, zuletzt von eltorte (17. Juni 2010 um 23:08)

  • Hmm, da habe ich wohl das Kubrik Theme nicht richtig analysiert...
    Bei mir ist das simpel gelöst, Beispiel für die Seite "wohnungen":


    ich hab das jetzt mal getestet, sobald ich aber bei den bestimmten Seiten die neue page.php einstelle, gibt er die Seite gar nicht mehr aus. Das Browserfenster bleibt weis.

    Ich habe jetzt eine zweite header.php angelegt und die page2.php soll dann header2.php laden.


    wie sag ich das auf php?

    Zitat

    get_header(); ?>

    so steht es ja in der page.php,

    aber wo wird definiert, welche php datei er bei diesem Befehl aufruft, bzw wie ändere ich den Befehl, das er die zweite header.php aufruft?

    Einmal editiert, zuletzt von eltorte (7. Juli 2010 um 15:31)

  • http://codex.wordpress.org/Function_Reference/get_header

    PHP
    <?php get_header('2'); ?>

    dafuer wuerdest du 'header-2.php' brauchen.

    oder

    http://codex.wordpress.org/Include_Tags#I…ng_Any_Template

    PHP
    <?php include( TEMPLATEPATH . '/header2.php' ); ?>

    super, vielen, vielen Dank :razz:

    hab es jetzt kapiert. Nur stellt sich jetzt noch eine weitere Frage:

    im Kubrick- Theme wird das Bild des headers in der datei header-img.php definiert.

    also habe ich jetzt eine header-img2.php erstellt und dort den 2ten header (kubrickheader2.php) definiert.

    wo und wie wird die header-img.php mit eingebaut ..????

    vorab schon mal vielen Dank

  • soweit ich es verstehe, wird header-img.php nur verwendet, wenn man im backend die custom-header einstellung vornimmt (aendert die farben und gradienten).

    ein alternatives headerbild muss im css style festgelegt werden (das standard-headerbild ist in der style.css als hintergrund in #header definiert (zeile 38 )
    um in einem anderen template (header2.php) ein anderes headerbild festzulegen, muss diese datei im <head> bereich einen style embedden: zB:

    PHP
    <style type="text/css" media="screen">
    #header {
     background: #73a0c5   url('images/kubrickheader2.jpg') no-repeat bottom center; } 
     </style>



    und das muss dann in jedem header3.php, header4.php, usw fuer jede spezielle seite gemacht werden.

    ---------------
    meiner meinung nach viel zu kompliziert, um nur das headerbild fuer eine oder mehrere spezielle seiten anders zu haben; ich komme wieder auf die 'body_class()'-methode zurueck;
    eine vereinfachte variante, die nur den page-slug als eine body class zufuegt;
    anstelle des body tags <body> das folgende im header.php einsetzen:

    PHP
    <body <?php if(is_page()) { $page_name = 'page-'.$post->post_name; echo ' class="'.$page_name.'; "'; }; ?>>



    das gibt dann seitenabhaengig einen body tag wie zB (fuer eine seite mit dem namen: 'Diese Seite 2'):

    HTML
    <body class="page-diese-seite-2; ">



    fuer das spezifischen headerbild in der style.css dann das hier einsetzen:

    Code
    .page-diese-seite-2 #header { background: #73a0c5   url('images/kubrickheader2.jpg') no-repeat bottom center; }
    .page-jene-seite-3 #header { background: #73a0c5   url('images/kubrickheader3.jpg') no-repeat bottom center; }
  • um auf den startartikel zurueckzukommen:

    Zitat

    Ich habe 8 Seiten + die main- page. 3 Seiten + die main- page sollen [COLOR=#306582]Header[/COLOR] A bekommen, die anderen 5 Seiten [COLOR=#306582]Header[/COLOR] B.



    das wuerde mit wenig code im header.php im <head> bereich funktionieren:

    PHP
    <style type="text/css" media="screen">
    <?php
    if( is_page(array('page1B', 'page2B', 'page3B', 'page4B', 'page5B' ) ) { ?>
    #header {  background: #73a0c5   url('images/kubrickheaderB.jpg') no-repeat bottom center;  }  
    <?php } ?>
    </style>


    einfach die 5 page-IDs, page-slugs oder page_titels fuer header B eingeben.
    beliebig erweiterbar.

  • um auf den startartikel zurueckzukommen:


    das wuerde mit wenig code im header.php im <head> bereich funktionieren:

    PHP
    <style type="text/css" media="screen">
    <?php
    if( is_page(array('page1B', 'page2B', 'page3B', 'page4B', 'page5B' ) ) { ?>
    #header {  background: #73a0c5   url('images/kubrickheaderB.jpg') no-repeat bottom center;  }  
    <?php } ?>
    </style>

    einfach die 5 page-IDs, page-slugs oder page_titels fuer header B eingeben.
    beliebig erweiterbar.


    ich hab mich jetzt mal deiner ursprünglichen Methode zugewandt, die page-IDs eingetragen und bekomme folgende Fehlermeldung:

    PHP
    Parse error:  syntax error, unexpected '{' in /homepages/21/d34153323/htdocs/wordpress/wp-content/themes/default2/header.php  on line 35
  • PHP
    Parse error:  syntax error, unexpected '{' in /homepages/21/d34153323/htdocs/wordpress/wp-content/themes/default2/header.php  on line 35

    Ich würde mich nicht unbedingt als PHP-Experten bezeichnen, aber müsste am Ende der dritten Zeile (im Foren-Posting) nicht die geschweifte Klammer durch ein Semikolon ersetzt werden?

    Bego

  • mein fehler:
    da hab ich doch mal wieder eine schliessende klammer in der zeile mit dem 'if' vergessen :roll::

    soll so aussehen:

    PHP
    <style type="text/css" media="screen">
    <?php
    if( is_page(array('page1B', 'page2B', 'page3B', 'page4B', 'page5B' ) ) ) { ?>
    #header {  background: #73a0c5   url('images/kubrickheaderB.jpg') no-repeat bottom center;  }  
    <?php } ?>
    </style>
  • mein fehler:
    da hab ich doch mal wieder eine schliessende klammer in der zeile mit dem 'if' vergessen :roll::

    soll so aussehen:

    PHP
    <style type="text/css" media="screen">
    <?php
    if( is_page(array('page1B', 'page2B', 'page3B', 'page4B', 'page5B' ) ) ) { ?>
    #header {  background: #73a0c5   url('images/kubrickheaderB.jpg') no-repeat bottom center;  }  
    <?php } ?>
    </style>


    super geil, hat sofort geklappt.

    da hab ich ja wieder mal 10 Stunden meines Lebens unnötig verschleudert, nur weil ich nicht gleich auf dich gehört hab. ;-)

    danke nochmal

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!