2012-09-07 2 views
5

UPDATE: Ho provato con il seguente codice:ordinazione messaggi Wordpress basati sulla categoria principale

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else { 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    } 
?> 

C'è qualche motivo per cui andrei che funzionano? Sembra funzionare bene organizzando i messaggi in ordine alfabetico, ma ancora senza fortuna nell'ordine delle date all'interno degli "eventi".

-

Dopo la ricerca attraverso varie domande esistenti che non riesco a trovare una soluzione a quello che sto cercando di fare.

Attualmente tutti i messaggi sul mio sito sono ordinati in ordine alfabetico, il che va bene tranne che per una nuova categoria che ho aggiunto. Per questa categoria voglio ordinare tutti i post con un valore che inserisco in un campo personalizzato. Il campo è chiamato 'event_date', quindi voglio ordinare essenzialmente i post per data, ma non la data di creazione del post, la data in cui l'utente entra manualmente in questo campo.

sono riuscito a farlo funzionare utilizzando:

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

Tuttavia, questo ignora l'ordine aphabetical per tutte le altre pagine.

Per ordine alfabetico sto usando:

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

In sostanza voglio una dichiarazione che dice la pagina per ordinare tutti i messaggi in ordine aphabetical, a meno che la categoria è 'eventi', dove voglio ordinare loro da la data dell'evento personalizzato.

Come si può probabilmente dire che sono molto front-end, non back-end, quindi un sacco di questo è abbastanza nuovo per me, quindi qualsiasi aiuto o consiglio è apprezzato.

risposta

0

Speriamo che ho capito la tua domanda, utilizzare la WP_Query e all'interno della orderby aggiungere uno spazio tra il tuo ordine da colonne:

$args = array(
    'posts_per_page' => 100, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 

if(is_category($events)){ 
    $args['orderby'] .= " meta_value_num"; 
    $args['meta_key'] = 'event_date'; 
} 

$posts = (array) new WP_Query($args); 
+0

Non avrei bisogno di usare un'istruzione if lì da qualche parte per dire alla categoria di eventi di visualizzare la pagina in modo diverso rispetto ad altre categorie? –

+0

Sì, lo faresti. Aggiornamento della risposta –

+0

Apprezzo molto il tuo aiuto in questo, tuttavia non riesco comunque a utilizzare WP-Query. C'è qualche motivo per cui il seguente potrebbe funzionare correttamente? Visualizza tutti i cateogies in ordine alfabetico, ma non gli eventi in ordine di data?

0

Che dire:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

Ho provato ad usarlo ma poi nessuno dei due mostra come dovrebbe. Apprezzo comunque la risposta. –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

Per ordinare i messaggi di un valore di campo personalizzato, è necessario aggiungere il meta campo personalizzato alla query stessa. orderby=meta_value oltre a meta_key=metafieldid consentirà l'ordine in questo modo.

Vorrei utilizzare pre_get_posts hook e modificare l'oggetto query se get_query_var("cat") (o una query simile var) restituisce la categoria di post desiderata.

add_action("pre_get_posts", "custom_event_post_order"); 

function custom_event_post_order($query) 
{ 
    $queried_category = $query -> get_query_var("cat"); 

    /* 
    * If the query in question is the template's main query and 
    * the category ID matches. You can remove the "is_main_query()" 
    * check if you need to have every single query overridden on 
    * a page (e.g. secondary queries, internal queries, etc.). 
    */ 
    if ($query -> is_main_query() && $queried_category == 123) 
    { 
     $query -> set("meta_key", "event_date"); // Your custom field ID. 
     $query -> set("orderby", "meta_value"); // Or "meta_value_num". 
     $query -> set("order", "ASC"); // Or "DESC". 
    } 
} 

Ricordare che questo approccio sostituisce tutte le query che utilizzano la categoria in questione. È possibile creare oggetti WP_Query personalizzati che utilizzano i propri parametri per la creazione di loop.

Inoltre, è necessario standardizzare il modo in cui si salvano i dati del campo personalizzato nel database. Per le date preferisco usare tempi di formattazione UNIX-timestamp facili da spostare e manipolare. In questo modo non si verificano incidenti durante la query e alcuni dati vengono formattati in un altro modo rispetto al resto.

Disclaimer: Non ho avuto il tempo di testare il codice sopra in azione, ma l'idea generale dovrebbe funzionare correttamente.

MODIFICA: ovviamente il codice sopra deve essere inserito in functions.php o un file di funzioni generiche simile.

+0

Soluzione molto buona e pulita! – Philipp