Wie kann ich eine Liste mit Kategorien und all ihren Beiträgen in WordPress anzeigen?

Lesezeit: 3 Minuten

Benutzer-Avatar
alexconnor7

Ich arbeite an einem benutzerdefinierten WordPress-Theme.

Ich versuche, eine Liste von Kategorien (als Überschriften) für einen benutzerdefinierten Beitragstyp anzuzeigen, und unter jeder Kategorieüberschrift möchte ich die Beitragstitel und ein einzelnes benutzerdefiniertes Feld auflisten. Ich verwende das Types-Plugin. Ich kenne ein wenig PHP und habe einige WordPress-Erfahrung, aber nicht ganz genug, um das richtig herauszufinden.

Beispiel:

Benutzerdefinierter Beitragstyp: Menüpunkt

Benutzerdefiniertes Feld für diesen Beitragstyp: Stückpreis

Kategorie: Sandwich-Füllungen

Kategorie: Suppen

Erwünschtes Ergebnis:

Sandwich-Füllungen

Käse – £#.##

Schinken – £#.##

Thunfisch – £#.##

Suppen

Tomate

Huhn

Gemüse

Die Idee wird sein, dass neue Kategorien spontan hinzugefügt werden (z. B. könnten sie eines Tages mit dem Verkauf von Schmelzen beginnen) und dass WP die Kategorien durchläuft, wenn neue hinzugefügt werden, um zu sparen, dass neue Kategorien fest programmiert werden müssen auf der Seite, sobald sie hinzugefügt werden.

Hier ist, was ich bisher habe:

<?php

    $args = array(
        'post_type' => 'menu-item',
        'orderby' => 'name',
        'parent' => 0
    );

    $categories = get_categories( $args );

    foreach ( $categories as $category ) {

        $posts = get_posts($args);
        $item_price = types_render_field( "item-price" );

        echo '<h2>' . $category->name . '</h2>';
        ?>
            <ul><?php
            foreach($posts as $post) {
            ?>
                <li><?php the_title(); ?>, <?php echo $item_price; ?></li>
            <?php 
        }       
    }
?>

Was ich bekomme ist das:

Sandwiches

Tomate,

Schweizer Käse,

Französischer Brie,

Französischer Brie,

Suppen

Tomate, 2,60 £

Schweizer Käse, £2.60

Französischer Brie, £2,60

Französischer Brie, £2,60

Jede Hilfe wäre willkommen!

AKTUALISIEREN

Das scheint geholfen zu haben:

<?php

    $args = array(
        'post_type' => 'menu-item'
    );

    $categories = get_categories( $args );
    $posts = get_posts($args);


    foreach ( $categories as $category ) {



        echo '<h2>' . $category->name . '</h2>';
        ?>

        <div class="menu-items-container">
            <?php foreach($posts as $post) { ?>
                <?php $item_price = types_render_field( "item-price" ); ?>
                <?php if (in_category($category)) { ?>
                    <p><?php the_title(); ?>, <?php echo $item_price; ?></p>
                <?php  } ?>
            <?php  } ?>
        </div>
<?php } ?>

Und es liefert mir die Ergebnisse, nach denen ich gesucht habe. Ich bin durch Experimentieren und einen glücklichen Zufall auf diese Lösung gestoßen, daher bin ich mir bewusst, dass es möglicherweise nicht die beste Vorgehensweise ist – Ratschläge oder Verbesserungsvorschläge wären willkommen!

  • Ziemlich interessante Frage, da es wirklich einfach zu bewerkstelligen ist, ABER wenn Sie den einfachen Weg und den allgemeineren Weg wählen (wie Sie es als Ihre Lösung getan haben), es ist wirklich teuer zu betreiben. Bei einer kleinen Installation mit nur wenigen Kategorien und Posts führen Sie bereits mehr als 100 Abfragen aus, was verrückt ist. Leider bin ich von einem anstrengenden Tag völlig erschöpft, habe nicht die Kraft, ein funktionierendes Beispiel zu codieren, aber am besten führen Sie eine Abfrage aus, um alle Beiträge und die Verwendung zu erhalten usort() um die Ergebnisse nach Kategorien zu sortieren

    – Pieter Goosen

    20. Dezember 2015 um 18:39 Uhr

Benutzer-Avatar
Petko Bossakow

So etwas könnte besser sein, da es nicht alle Posts für jede Kategorie durchläuft:

<?php

    $args = array(
        'post_type' => 'menu-item'
    );

    $categories = get_categories( $args );

    foreach ( $categories as $category ) {

        echo '<h2>' . $category->name . '</h2>';

        $args['category'] = $category->term_id;
        $posts = get_posts($args); ?>

        <div class="menu-items-container">
            <?php foreach($posts as $post) { ?>
                <?php $item_price = types_render_field( "item-price" ); ?>
                <p><?php the_title(); ?>, <?php echo $item_price; ?></p>
            <?php  } ?>
        </div>
<?php } ?>

1370780cookie-checkWie kann ich eine Liste mit Kategorien und all ihren Beiträgen in WordPress anzeigen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy