Fehler im php-Code?

  • Hallo,
    auf meiner Startseite werden verschiedene Posts zu unterschiedlichen Kategorien angezeigt. Beim Verfassen der Post setze ich nach einigen Zeilen ein „More-Element“. Dadurch wird nicht der ganze Post auf der Startseite angezeigt, sondern eben nur der Text bis zum „More-Element“ und dann wird ein link zum Rest des Posts gesetzt. Dieser link leitet dann auf die „Single-Page“ des betreffenden Posts. Also nichts ungewöhnliches.

    Ich möchte nun einen bestimmten Post aus einer bestimmten Kategorie nach dem dritten Post auf der Startseite anzeigen lassen und dort fixieren.

    Dazu habe ich die bestehende index.php des WordPress-Templates wie folgt abgeändert (siehe Anhang index.php)

    Mein Gedanke war: Ich habe zuerst die Kategorie generell von der Startseite ausgeschlossen, dann eine Variable gesetzt, dann den Befehl „nach dem dritten Post meinen gewünschten Post einsetzen“ gesetzt.

    Als Ergebnis ist es aber nun so, dass zwar mein gewünschter Post nach dem dritten Post gesetzt wird, allerdings komplett (also nicht nur im textlichen Ausriss wie bei den anderen Posts) und nach diesem Post keine weiteren Posts mehr folgen.
    Ich möchte aber:
    1. Den gewünschten Post auch nur im textlichen Anriss veröffentlichen und dann mit einem link weiterleiten
    2. Sollen nach dem gewünschten Post auch noch weitere Posts folgen

    Erkennt jemand den Fehler?
    Danke für Hilfe!!
    Viele Grüße

    • 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

  • PHP
    <?php if ( $postcount == 3 ): ?>
      <?php $thirdPost = new WP_Query('p=443'); $thirdPost->the_post(); ?> // holt Post #443 und setzt Loop-Variablen
        <?php the_content(); // Postinhalt ausgeben ?>
    <?php endif; ?>
  • O.K., einen Lichtblick hatte ich selbst.
    Ich habe jetzt gleich nach dem Loop folgendes gesetzt:
    [LEFT] [COLOR=#000000] [COLOR=#0000cc]<?php
    [/COLOR][COLOR=#006600]global [/COLOR][COLOR=#0000cc]$more[/COLOR][COLOR=#006600];
    [/COLOR][COLOR=#0000cc]$more [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]0[/COLOR][COLOR=#006600];
    [/COLOR][COLOR=#0000cc]?>[/COLOR] [/COLOR] [/LEFT]
    Damit erscheint jetzt auch der fixierte Beitrag mit dem More-Tag.
    Allerdings stoppt die Auflistung der weiteren Blogs immer noch nach dem fixierten Blog. Warum?

  • Hallo,
    danke! Habe jetzt Deinen Code unter dem Loop eingesetzt und funktioniert auch, allerdings erscheint jetzt der Post doppelt (einmal als Text ohne Überschrift und unformatiert und dann darunter genau richtig, so wie es sein soll).
    Wie kriege ich jetzt den falschen doppelten Eintrag weg?

  • Vermutlich wird er im primären Loop nochmal ausgegeben. Du müsstest den Post dort entweder ausschließen bzw. darauf achten dass die Post-Variablen korrekt gesetzt und nicht überschrieben werden. Versuch einfach mal nachzuvollziehen wie WP arbeitet (the_post() setzt z.B. die Variablen für the_title() etc.), dann merkst du schon wo der Loop ins Stolpern kommt. Ein Loop in einem anderen Loop ist eben immer etwas tricky. ;-)

    (Vielleicht kommst du auch eher mit get_posts() für den inneren Loop zum Ziele - da werden die Post-Variablen nicht zwingend überschrieben. Schaus dir einfach mal an: Template Tags/get posts WordPress Codex)

  • Hallo,
    ich habe jetzt einfach "[COLOR=#000000][COLOR=#0000CC]<?php the_content[/COLOR][COLOR=#006600](); [/COLOR][COLOR=#FF9900]// Postinhalt ausgeben [/COLOR][COLOR=#0000CC]?> "
    entfernt und dann geht es - danke!

    Allerdings habe ich jetzt ein anderes Problem:
    Wenn ich noch vor dem ersten Loop mit
    [/COLOR][/COLOR]<?php query_posts('cat=-40'); ?>
    die Kategorie des fixierten Posts ausschließe (damit dieser nicht zweimal auf der Startseite erscheint, nämlich einmal als aktueller Post und dann noch einmal wie gewünscht an dritter Position) "zerschießt" es mir die 2te Seite der Startseite. Dort werden dann die gleichen Posts angezeigt wie auf Seite eins.
    Entferne ich den Befehl, stimmt zwar die Seite 2 wieder, allerdings wird dann der fixierte Post auf der Startseite zweimal gepostet - eben einmal zuerst als neuer Post und dann an der gewünschten dritten Position.
    Es ist zum verzweifeln!!

  • Hallo,
    eigentlich klappt jetzt alles super. Nur überlagert der "fixierte" Post jetzt immer einen anderen Post, der erst wieder sichtbar wird, wenn der nächste Post veröffentlicht wird und dann wird der folgende wieder unsichtbar und so weiter.
    Folgender Code steht jetzt nach dem loop:

    <?php if ( $postcount == 3 ): ?>
    <?php $thirdPost = new WP_Query('p=506'); $thirdPost->the_post(); ?>
    <?php endif; ?>

    Was kann ich jetzt noch machen, damit kein Post verdeckt wird?
    Danke für Hilfe!

  • Mit "überlagert" meinst du, dass der fixierte Post #506 statt des normal an 3. Stelle erscheinenden Posts gezeigt wird? Bau mal den sekundären Loop am Ende des primären Loops ein (kannst ja die $postcount-Variable anpassen, damit die gewünschte Reihenfolge wieder stimmt).

  • Hm, wenn ich den Code an anderer Stelle eingebe, passiert gar nichts.
    So steht er jetzt und dann wird der fixierte Post anstelle des dritten gezeigt:

    PHP
    <?php
    if (have_posts()):
      $i = 0; $postcount = 1;
      while (have_posts()) :
        the_post();
        ?>
    <?php if ( $postcount == 3 ): ?>
    <?php $thirdPost = new WP_Query('p=506'); $thirdPost->the_post(); ?>  
    <?php endif; ?>

    Einmal editiert, zuletzt von marX (26. Februar 2009 um 21:57)

  • Nur mal eine dumme Frage.. fehlt da nicht was?
    Du setzt $i=0 und $postcount=1;
    Mit den Variablen passiert aber doch nix.. müsste man die nicht hochzählen oder geschieht das irgendwo im Loop automatisch?
    (Also im Stil von $postcount++;)

  • Hi, ja, die zähle ich auch hoch. Anbei das ganze komplett. Eine Idee, wo der Fehler liegen könnte?

    Einmal editiert, zuletzt von king71 (27. Februar 2009 um 10:15)

Jetzt mitmachen!

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