2012-09-07 15 views
5

ACTUALIZACIÓN: He intentado usar el siguiente código:Pedido de mensajes basados ​​en Wordpress categoría padre

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

¿Hay alguna razón por la que wouldnt trabajo? Parece que funciona bien organizar las publicaciones en orden alfabético, pero todavía no hay suerte en el orden de fecha dentro de 'eventos'.

-

Después de buscar a través de varias preguntas existentes no acabo de encontrar una solución a lo que estoy tratando de hacer.

Actualmente todas las publicaciones en mi sitio están ordenadas alfabéticamente, lo cual está bien, excepto por una nueva categoría que he agregado. Para esta categoría, quiero ordenar todas las publicaciones por un valor que ingrese en un campo personalizado. El campo se llama 'event_date', por lo que quiero ordenar las publicaciones por fecha esencialmente, pero no la fecha en que se creó la publicación, la fecha que el usuario ingresa manualmente en este campo.

me las arreglé para conseguir que funcione mediante el uso de:

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

Sin embargo, esto anula el órden alfabético de todas las demás páginas.

Por orden alfabético estoy usando:

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

Esencialmente Quiero una declaración que indica a la página para ordenar todos los mensajes en órden alfabético, a menos que la categoría es 'eventos', en el que necesito para ordenarlos por la fecha del evento personalizado.

Como probablemente pueda decir, estoy en la parte delantera, no en la parte trasera, así que gran parte de esto es bastante nuevo para mí, por lo que cualquier ayuda o consejo es apreciado.

Respuesta

0

Esperemos que entender su pregunta, utilice el WP_Query y dentro de la orderby agregar un espacio entre su orden por columnas:

$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

¿No necesitaría usar una declaración if allí en algún lugar para decirle a la categoría de eventos que muestre la página de manera diferente a otras categorías? –

+0

Sí, lo harías. Actualizando la respuesta –

+0

Agradezco mucho su ayuda con esto, aún así no tengo suerte usando el WP-Query. ¿Hay alguna razón por la cual funcionaría lo siguiente? Muestra todas las categorías en orden alfabético, pero no los eventos en orden de fecha?

0

¿Qué pasa:

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

Intenté usar esto pero luego no lo visualicé como deberían. Apreciar la respuesta sin embargo. –

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

Requerir a los mensajes de un valor de campo personalizado, necesita agregar el campo meta personalizado a la consulta misma. orderby=meta_value además de meta_key=metafieldid permitirá ordenar de esta manera.

Usaría el pre_get_posts hook y modificaría el objeto de consulta si get_query_var("cat") (o una var de consulta similar) devuelve la categoría de publicación deseada.

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". 
    } 
} 

Recuerde que este enfoque anula todas las consultas que utilizan la categoría en cuestión. Puede construir objetos WP_Query personalizados que usen sus propios parámetros para construir bucles.

También debe estandarizar la forma en que guarda los datos de campo personalizados en la base de datos. Para las fechas, prefiero usar tiempos formateados en la marca de tiempo UNIX que sean fáciles de mover y manipular. De esta forma, no ocurren accidentes al consultar y algunos datos se formatean de otra manera que el resto.

Descargo de responsabilidad: No tuve tiempo de probar el código anterior en acción, pero la idea general debería funcionar correctamente.

EDITAR: por supuesto, el código anterior se debe insertar en functions.php o en un archivo de funciones genéricas similar.

+0

¡Solución muy buena y limpia! – Philipp

Cuestiones relacionadas