Loop "außerhalb" HTML

  • Hi Zusammen

    Mit den "benutzerdefinierten Feldern" kann man ja allerhand anstellen - aber (anscheinend) nur innerhalb des Loop.

    Darum dachte ich mir ich beginne den Loop ganz am Anfang der Seite (also noch vor "<?php get_header(); ?>") und beende ihn nach "<?php get_footer(); ?>".

    Handle ich mir da irgendwelche Probleme ein?
    Nach den ersten kurzen Tests scheints zu funktionieren...

    Danke für Eure Tipps und Erfahrungsberichte ;-)

    reykick

    • 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

  • Guck dir den generierten HTML-Quelltext an, auch mit einem HTML-Validator. Ich vermute mal ganz stark, dass der Validator seeeehr viele Fehler finden wird. Innerhalb des Loops wird ja alles sooft ausgegeben, wie Beiträge vorhanden sind. So ist HTML aber nicht spezifiziert.

  • Nur Loop-Start...

    Hi Mark

    Ich schreibe NUR die Zeile "<?php if (have_posts()) : while (have_posts()) : the_post(); ?> VOR dem Header, der Beitrag,... wird dann innerhalb des Body ausgegeben.

    Also z.B. so (aus dem "Classic"-Theme):

    PHP
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?><?phpget_header();?> <div class="post" id="post-<?php the_ID(); ?>"><h3 class="storytitle"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h3>



    u.s.w....

    PHP
    <?php posts_nav_link(' — ', __('&laquo; Previous Page'), __('Next Page &raquo;')); ?> <?php get_footer(); ?> <?php endwhile; else: ?><p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>



    Dies sollte den Quellcode ja nicht berühren (bis auf die "else"-Ausgabe nach dem Footer - "Sorry, no posts..." - läßt sich aber sicher noch ändern bzw. wäre das Loop-Ende VOR dem Footer auch schon ein Gewinn)...
    Ich bin nur noch nicht in die "funktionellen Tiefen" von WP vorgedrungen, darum mein Zögern... ;-)

    Mod.: Bitte lesen: http://forum.wordpress-deutschland.org/plugins-und-wi…-den-posts.html

    Einmal editiert, zuletzt von Arno Simon (22. Januar 2008 um 17:24)

  • Da Du die Schleife um sämltiche Angaben herum bastelst, könnte es den ausgegebenen HTML-Code schon vervielfachen... In der Form das die HEAD-und BODY-Tags etc. pp. gleich mehrfach ausgegeben werden dürften. Ob das die Browser alle sauber mitmachen, kann bezweifelt werden.

    vG

    Arno

    Feedback ist Wichtig!|FAQ|Rückfragen im Forum!|Wenn ich mal was vergesse.... einfach mal sagen...

  • reykick: Ich glaube du solltest dir erstmal genau angucken, wie ein WP-Template aufgebaut ist, und vor allem welchen HTML-Code WP intern dann daraus generiert. Glaub mir, du wirst bei deiner Lösung auf einige Probleme wie mehrfache <html>, <head>, <body>-Elemente usw. treffen. Diese sind laut HTML-Standard nicht erlaubt. Sieh dir den HTML-Quellcode im Browser an, oder verwende The W3C Markup Validation Service zur Überprüfung.

  • Mhhh, ich hab es jetzt mal Lokal bei der index.php so gemacht und die Site ist valide, keine Mehrfach-Heads/Bodys, auch die Beiträge (vier an der Zahl) werden richtig dargestellt.

    Darum habe ich ja hier gefragt weil ich mir nicht vorstellen konnte daß es so einfach ist ;-)
    Aber wenns Probleme geben kann... :-(

  • Die Funktion load_template ist so "intelligent", daß sie mit require_once($_template_file) das jeweilige Templatefile, z.B. header.php, nur einmal aufruft. Deshalb funktioniert es auch.
    Die Frage ist nur, wozu soll das überhaupt gut sein?

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ist es also doch "gefahrlos" zu machen?

    Hintergrund ist eigentlich nur daß ich "benutzerdefinierte Felder" gerne vermehrt verwenden möchte (z.B. für zusätzliche CSS-Anweisungen im Head,...) und die funktionieren ja nur im Loop...

  • Kann man so auch nicht sagen. Sinnvoll wäre das sowieso nur, wenn ein einzelner Beitrag dargestellt wird.
    Ich weiß ja nicht, wie Du auf die benutzerdefinierten Felder zugreifen willst, falls es mit der Funktion get_post_meta ist, dann brauchst den Trick mit der nach oben verlegten Loop nicht, denn bereits im Header stehen die globalen Variablen wie z.B. $post zur Verfügung.
    Das könnte dann so aussehen:

    PHP
    $subtitle = get_post_meta( $post->ID, 'subtitle', true );

    Naja, so mach ich es zumindest.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Die Funktion load_template ist so "intelligent", daß sie mit require_once($_template_file) das jeweilige Templatefile, z.B. header.php, nur einmal aufruft.


    Das dachte ich mir schon fast. Aber davon abgesehen dürfte es spätestens dann ein Problem geben, wenn der 2. Post nach dem Footer (der im 1. Post ausgegeben wird und i.d.R. </html> enthält) ausgegeben wird. Da hilft auch ein require_once nix.

  • ... Aber davon abgesehen dürfte es spätestens dann ein Problem geben, wenn der 2. Post nach dem Footer (der im 1. Post ausgegeben wird und i.d.R. </html> enthält) ausgegeben wird. Da hilft auch ein require_once nix.


    Stimmt auch wieder. Dann könnte man ja das endwhile weiter nach oben verlegen. Aber insgesamt ist das dann alles irgendwie nicht mehr übersichtlich. Wohin trickreiche Programmierung führen kann, haben wir ja beim MySQL "GROUP BY"-Fehler gesehen...

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Danke für Eure Tipps!

    Zusammengefasst kann man also sagen daß es (Loop nach außen verlegen) irgendwie funktioniert aber halt nicht immer ;-)
    Dann laß ich es lieber...

    Hab wieder mal viel gelernt, Danke nochmal :-)
    reykick

Jetzt mitmachen!

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