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