2013-12-10 22 views
6

Ich möchte eine Seite zum Filtern von Beiträgen basierend auf einer Reihe von Kriterien erstellen.Lassen Sie Benutzer Beiträge in Wordpress sortieren

Ich kann mit wp_query arbeiten und Posts ziemlich leicht liefern, mein Problem ist, dass ich nicht herausfinden kann (noch kann ich online irgendwelche Antworten darauf finden, glauben Sie mir, ich schaute), wie man Benutzer das tun lässt.

Nehmen Sie dies zum Beispiel, gibt die Beiträge in der Reihenfolge des Preises (benutzerdefiniertes Feld Meta-Wert) von der höchsten zum niedrigsten mit 33 Posts.

<?php 

$featuredPosts = new WP_Query(array(
'posts_per_page' => 33, 
    'meta_key'=>'Price', 
    'orderby' => 'meta_value_num', 
    'order' => DESC 
)); 

?> 

<?php if ($featuredPosts->have_posts()) : ?> 

<?php while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?> 

<article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>"> 
<h2 class="price-title"><?php the_title(); ?> </h2> 

</article> <!-- end div post --> 

<?php endwhile; wp_reset_query(); ?> 

<?php endif; ?> 

Nun, auch nach dem Lesen und googeln, werde ich verdammt sein, wenn ich herausfinden kann, wie ich das am vorderen Ende implementieren würde für Benutzer Beiträge zu filtern.

Ich meine, ich weiß, Sie können an die URLs in Wordpress anhängen, um die Reihenfolge der Beiträge zu ändern, aber in diesem Zusammenhang bin ich total verloren.

Ich habe das versucht, aber es funktioniert nicht.

<?php 

$by_price = esc_url(add_query_arg(array(
    'meta_key' => 'price', 
    'orderby' => 'meta_value_num', 
    'order' => ASC 
))); 
$by_date = esc_url(add_query_arg(array(
    'orderby' => 'date', 
    'order' => DESC 
))); 

?> 

<ul> 
    <li><a href="<?php echo $by_price;?>">Order by price</a></li> 
    <li><a href="<?php echo $by_date;?>">Order by date</a></li> 
</ul> 

Was ich versuche ist eigentlich ganz so gut einfach zu erreichen, damit der Benutzer die Kategorie wählen, wählen Sie die Preisspanne (Erraten ich etwas in JQuery schreiben würde einen Wert in ein Feld zu liefern), Legen Sie die Anzahl der Ergebnisse fest, die zurückgegeben werden sollen.

Ich habe versucht zu googeln alles unter der Sonne, die ich für dieses, keine Würfel denken kann.

Antwort

0

OK, ich den Code zu aktualisieren, um deutlich zu machen:

--- Ich glaube nicht, meta_key Auto-Pickup wäre ---

functions.php

... 

    $whitList = array(
     'price' => array(
     'posts_per_page' => 33, 
     'meta_key'=>'price', 
     'orderby'=>'meta_value_num', 
     'order' => ASC 
     ), 
     'date' => array(
     'posts_per_page' => 33, 
     'orderby'=>'date', 
     'order' => DESC 
     ) 
    ); 
... 

Ihre erste Schleife php:

<?php 

gloabl $whitList; //to use the $whitList in your functions.php. 

$aryQuery = $whitList[$_REQUEST['orderby']] ? $whitList[$_REQUEST['orderby']] : $whitList['price']; 

$featuredPosts = new WP_Query($aryQuery); 

.... 
.... 
?> 

Für Ihre Liste Seite:

<ul> 
<?php 
    gloabl $whitList; //to use the $whitList in your functions.php. 
    foreach($whitList as $orderby => $aryOrderBySettings){ 
     ?> 
     <li> <a href="<?php echo esc_url(add_query_arg('orderby', $orderby));?>">Order by <?php echo $orderby;?></a></li> 
     <?php 
    } 
?> 
</ul> 
+0

Muss der zweite Teil innerhalb der Schleife sein? – andy

+0

Nein, nicht in einer Schleife – Zac

+0

Wenn ich den zweiten Teil nicht in die Schleife vom ersten Teil einfüge, erscheint er nie auf der Seite. – andy

3

Versuchen Sie Simple Custom Post Order plugin.

Es verwendet AJAX und JavaScript, Sie müssen nichts anderes laden. Sie müssen die Posts einfach per Drag & Drop verschieben.

+0

Dies ist für Back-End-Filterung und nicht das, was das OP wollte. – phpheini

0

Verwenden $_GET Parameter ist der Weg, hier zu gehen. Zuallererst möchten Sie Ihren Besuchern den Zugang zu diesen Variablen erlauben. Der Link-Ansatz ist insgesamt gut, so dass wir erweiterte Links generieren können, indem wir add_query_arg verwenden, um zusätzliche Parameter an die aktuelle URL anzuhängen. Sie Ihre Haupt-Abfrage mit den Daten, die Sie gerade abgerufen vermehren würden

<?php 
    // Get an allowed sort variable and the order 
    $sort = isset($_GET['sort']) && in_array($_GET['sort'], array('price'))) 
      ? $_GET['sort'] : null; 
    $order = isset($_GET['asc']) && $_GET['asc'] == '0' ? 'DESC' : 'ASC'; 
?> 

Jetzt:

<?php 
    $urla = add_query_arg('sort' => 'price', 'asc' => '1'); 
    $urld = add_query_arg('sort' => 'price', 'asc' => '0'); 
?> 
<a href="<?php echo esc_url($url); ?>">Sort by price (asc)</a> 
<a href="<?php echo esc_url($url); ?>">Sort by price (desc)</a> 

Wenn Sie darauf klicken, kann die gehefteten auf Variablen so erkannt werden. Wenn Sie die Standardmethode zum Abfragen von Posts auf einer Seite verwenden, sollten Sie mit query_posts fortfahren können, obwohl es not recomended ist.Und wenn Sie eine benutzerdefinierte Schleife verwenden, injiziert einfach die neuen Argumente hinein:

<?php 
    $args = array(); 
    switch ($sort): 
     case 'price': 
      $args['order'] = $order; 
      $args['orderby'] = 'meta_value_num'; 
      $args['meta_key'] = 'price'; 
      break; 
     default: 
      break; 
    endswitch; 

    $defaults = array('posts_per_page' => 33); 
    $query = new WP_Query(wp_parse_args($args, $defaults)); 
?> 

Sie können weitere Variablen hinzufügen, um mehr URLs erstellen und Tasten zu drücken, und mehr Fälle in der switch-Anweisung zu verlängern das grundlegende Beispiel oben.

Das erste Stück Code würde überall dort hingehen, wo Ihre Schaltflächen angezeigt werden sollen. Der zweite Code steht vor dem dritten, der vor der Ausgabe der Ergebnisse steht.

Verwandte Themen