2013-12-10 4 views
6

Mi piacerebbe creare una pagina per filtrare i messaggi in base a una serie di criteri.Consenti agli utenti di ordinare i post in Wordpress

Posso lavorare con wp_query e recapitare i messaggi abbastanza facilmente, il mio problema è che non riesco a capire (né posso trovare alcuna risposta online su questo, credetemi ho guardato) come lasciare che gli utenti facciano questo.

Prendi questo ad esempio, restituisce i post in ordine di prezzo (valore meta campo personalizzato) dal più alto al più basso con 33 post.

<?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; ?> 

Ora, anche dopo aver letto e googling, che io sia dannato se riesco a capire come mi piacerebbe implementare questo sul front-end per gli utenti di filtrare i messaggi.

Voglio dire, so che è possibile aggiungere gli URL in Wordpress per modificare l'ordine dei post, ma in questo contesto sono totalmente perso.

Ho provato questo, ma non funziona.

<?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> 

Quello che sto cercando di realizzare è in realtà abbastanza semplice così, permettere all'utente di scegliere la categoria, selezionare la fascia di prezzo (indovinando mi piacerebbe scrivere qualcosa in JQuery per fornire un valore in un campo), imposta il numero di risultati che desidera vengano restituiti.

Ho provato su Google tutto il sotto il sole, posso pensare a questo, niente da fare.

risposta

0

OK, posso aggiornare il codice per mettere in chiaro:

--- non credo meta_key sarebbe funzione di risposta automatica ---

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 
     ) 
    ); 
... 

tuo prima php ciclo:

<?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); 

.... 
.... 
?> 

Per la vostra pagina della lista:

<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

La seconda parte deve essere all'interno del ciclo? – andy

+0

No, non in un ciclo – Zac

+0

A meno che non inserisca la seconda parte all'interno del ciclo dalla prima parte, essa non viene mai visualizzata sulla pagina. – andy

3

Prova Simple Custom Post Order plugin.

Si sta utilizzando AJAX e JavaScript, non è necessario caricare altro. Devi solo trascinare e rilasciare i post.

+0

Questo è per il filtro back-end e non quello che l'OP voleva. – phpheini

0

Utilizzare i parametri $_GET è il modo per andare qui. Prima di tutto vorrai consentire ai tuoi visitatori l'accesso a questi aggiungere queste variabili. L'approccio del collegamento va bene, nel complesso, quindi possiamo generare collegamenti aumentati utilizzando lo add_query_arg per aggiungere parametri aggiuntivi all'URL corrente.

<?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> 

Quando si fa clic, il appiccicato variabili può così essere rilevato:

<?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'; 
?> 

Ora si potrebbe aumentare il vostro query principale con i dati appena recuperati. Se stai utilizzando il modo predefinito di interrogare i post su una pagina, dovresti riuscire a farla franca con query_posts, anche se è not recomended.E, se si sta utilizzando un ciclo personalizzato, semplicemente iniettare nuovi argomenti in esso:

<?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)); 
?> 

È possibile aggiungere più variabili, con la creazione di più URL e pulsanti da premere, e più casi nella dichiarazione interruttore di estendere l'esempio di base sopra.

Il primo pezzo di codice dovrebbe andare dove vuoi che appaiano i pulsanti. Il secondo pezzo di codice va prima del terzo, che va prima di emettere i risultati.