Nur 1 Artikel von jeweils 1er Kategorie

  • Hello,

    vielleicht kann mir hier jemand helfen, weil ich ehrlich gesagt nicht weiß, wie ich an die Sache ran gehen sollte.

    Wie der Titel schon sagt, versuche ich den jeweils (aktuellsten) Artikel der einzelnen Kategorien zu bekommen. Allerdings würde ich da gerne 1 od. 2 Kategorien ausschließen. Am feinsten wäre in einem Array, damit ich dann in etwa so etwas machen kann:

    PHP
    <?php foreach ($meineartikel as $meinartikel) { ?>
            <li class="liste"><div class="content"><h2 class="alt"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2><p><?php the_excerpt(); ?></p></div></li>
    <?php } ?>


    habe schon versucht folgendes vor die foreach-Geschichte zu stellen ...

    PHP
    <?php
     global $post;
     $aaa = get_posts('numberposts=1&offset=2&category=15&orderby=rand'); // CI
     $bbb = get_posts('numberposts=1&offset=2&category=14&orderby=rand'); // Logo
     $ccc = get_posts('numberposts=1&offset=2&category=17&orderby=rand'); // Print
     $meineartikel = array($aaa,$bbb,$ccc);
    ?>

    ....bekomme dann aber alle Artikel aller kategorien und das jeweils 3x :???:

    • 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

  • Prinzipiell sieht das gut aus.

    Ich weiß grade nicht, was exakt get_posts() zurückliefert. Aber probier mal folgendes:

    PHP
    $meineartikel = $aaa + $bbb + $ccc;


    (ja, "+" ist auch für Arrays definiert ;-))

    oder

    PHP
    $meineartikel = array_merge($aaa,$bbb,$ccc);


    PHP: array_merge - Manual

    Eventuell mal per var_dump() nachschauen, ob $meineartikel das gewünschte enthält. Und mal "showposts" statt "numberposts" probieren.

  • Hey Marx,

    PHP
    $meineartikel = $aaa + $bbb + $ccc;

    funktioniert leider nicht, weil er nur $aaa in´s Array speichert.

    PHP
    $meineartikel = array_merge($aaa,$bbb,$ccc);

    funktioniert genauso wie nur "array()"

    Es liefert query_posts und get_posts prinzipiell dasselbe. Teilweise ist die Reihenfolge der Ausgabe anders, was aber wurscht sein sollte. Selbiges bei numberposts und showposts (auch dasselbe Ergebnis).

    :confused: Mein Problem ist, dass aus irgendeinem Grund ab dem foreach dann plötzlich nur der aktuellste Artikel auftaucht, die nirgendwo definiert ist :confused:

    var_dump() gibt das richtige aus, also müsste der Fehler beim foreach liegen... nur wie kann das sein? Wieso wird hier das Argument numberposts/showposts=1 aus einem der 3 querys genommen und dann aber wieder etwas ausgegeben, was in dem array gar nicht drinnen ist/sein kann?

  • Hi Marcus,

    hab ich jetzt auch gemacht. Ich wollte das nur deswegen im vorhinein in ein Array stopfen, damit sich der Quellcode der index.php nicht so aufbläst. Ich verwende ein jQuery-Carousel, dass sich mit <li> anfüllt. Jetzt muss ich eben wegen jeder Kategorie, deren aktuellster Post dort auftaucht, dann wieder eine zusätzliche query und darunter dann einen loop pro <li>-Element starten und danach wieder brechen und den nächsten starten. Insgesamt hab ich jetzt in der Index.php 7 (4 weitere unterm Carousel) "große" Loops und 33 DB-Abfragen. Dauert zwar nur eine halbe Sekunde, aber trotzdem wäre mir ein schlankerer, flexiblerer Code lieber gewesen. Wenns Dir noch was einfällt, wär´s nett. Ich würde einfach lieber am Anfang meiner Datei die Paramter aufrufen und unten dann schon allein wegen der Lesbarkeit nur via foreach-Schleife aufrufen. :neutral:

  • Warum sollten sich die DB-Abfragen verringern wenn du die Arrays zusammenführst? Die Queries kommen durch get_posts() zustande, und das hast du ja so oder so 3x drin. Außerdem kommts weniger auf die Anzahl der Queries an, sondern mehr auf deren Kosten und Resultate.

  • da hast schon recht. ich hab mir die anzahl der abfragen und die benötigte zeit im footer ausgegeben.

    PHP
    <!-- Datenbank -->
    <?php echo $wpdb->num_queries; ?> Abfragen. <br /> <?php timer_stop(1); ?> Sekunden.

    Das eigentliche "Problem" für mich ist ja eigentlich nur die (jetzige) Lesbarkeit / Umfang der index.php, bzw. die Ausdehnung mit jeder weiteren Kategorie. Anders wäre es halt um einiges kürzer, lesbarer, eleganter gelöst...

    Das feinste wäre halt eben gleich eine query, die aus n verschiedenen kategorien, den jeweils aktuellsten Artikel holt. Geht nur halt so gar nicht.

    Firebug laden! Foreregeln bitte lesen. FAQ. Bitte keine Anfragen per PN.

    Einmal editiert, zuletzt von kaiser (19. Mai 2009 um 16:06)

  • Nee, so eine Query kenn ich auch nicht. Ich versteh aber dein Problem. Du könntest höchstens die Loops in eine eigene Template-Funktion auslagern, der du die verschiedenen Query-Objekte übergibst. Oder eine Schleife, die nacheinander die Loops dynamisch aufruft. Was anderen fällt mir dazu auch nicht ein.

  • edit: hab jetzt sowieso das system komplett umdrehen müssen und bin drauf gekommen, dass sich jetzt so quasi alles ändert... wir hören uns also wieder :mrgreen:

Jetzt mitmachen!

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