Frage

Ist es mit WP_Query möglich, eine gefilterte Liste der Elemente zurückzugeben, die auf den folgenden Kriterien gesetzt sind? Ich scheine zu kämpfen zu haben, da es zahlreiche Fragen gegen benutzerdefinierte Felder gibt.

Select all posts that are of type business_club (post_type)
Where the post has a zone of 'Asia' (meta_value)
Order by country ASC (meta_value)
then by town ASC (meta_value)
then by title (wp value)

Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung 3

Der Weg um ihn herum war es, eine individuelle Abfrage zu erstellen. Weitere Informationen dazu können im WordPress -Codex unter angezeigt werden http://codex.wordpress.org/displaying_posts_using_a_custom_select_query.

Mein endgültiger Code sah wie folgt aus

<?php               
$row = 0;
$zone = $_GET['zone'];
if (!$zone) $zone = "United Kingdom";
?>

<table class="formattedTable" cellspacing="1" cellpadding="0">
<tr>
    <th width="140">Country</th>
    <th width="140">Town</th>
    <th>Club</th>
</tr>
<?php

$query = "
SELECT
  posts.*
FROM
  $wpdb->posts posts
INNER JOIN
  $wpdb->postmeta meta1 ON posts.ID = meta1.post_ID
INNER JOIN
  $wpdb->postmeta meta2 ON posts.ID = meta2.post_ID
INNER JOIN
  $wpdb->postmeta meta3 ON posts.ID = meta3.post_ID
WHERE
  posts.post_type = 'club' AND
  posts.post_status = 'publish' AND
  meta1.meta_key = '_club-zone' AND
  meta1.meta_value = '$zone' AND
  meta2.meta_key = '_club-country' AND
  meta3.meta_key = '_club-town'
ORDER BY
  meta2.meta_value,
  meta3.meta_value,
  posts.post_title";

$posts = $wpdb->get_results($query, object);        
if ($posts)
    foreach($posts as $post)
    {
        global $post;
        setup_postdata($post);

        echo '<tr class="' . ($row % 2 == 0 ? 'odd' : 'even') . '">';
        echo '<td>' . get_post_meta(get_the_ID(), '_club-country', true) . '</td>';
        echo '<td>' . get_post_meta(get_the_ID(), '_club-town', true) . '</td>';
        echo '<td><a href="' . get_permalink(get_the_ID()) . '">' . get_the_title() . '</a></td>';
        echo '</tr>';
        $row++;
    }

?>
</table>

Andere Tipps

Hast du so etwas versucht:

$loop = new WP_Query( array( 
    'post_type' => 'business_club',
    'meta_value' => 'United Kingdom',
    'order' => 'ASC',
    'orderby' => 'meta_value',
    'meta_key' => 'zone'
 ) ); 
while ( $loop->have_posts() ) : $loop->the_post();

Ich weiß noch nicht, ob Sie das tun können Dann bestellen Sie Stadt, Dorf und Titel.

Wenn alle Ergebnisse dieselbe Zone haben, warum möchten Sie dann nach Zone bestellen?

Soweit ich weiß, können Sie nicht zwei Meta_Keys in eine einzelne Abfrage einbeziehen. Sie müssen also die Abfrage schreiben, um die nach dem Titel bestellten Ergebnisse zurückzugeben, sie in einem Array zu speichern und dann das Array in die Reihenfolge zurückzugreifen, die Sie mit PHP benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top