add_filter () no funciona en bucle

2

Estoy intentando ordenar las publicaciones en la página de inicio por fecha de modificación, y coloco este código en las funciones.php de mi tema infantil activo:

function orderby_last_modified() {
  return 'post_modified DESC';
}

Si agrego el filtro en el mismo archivo functions.php, funciona:

add_filter('posts_orderby', 'orderby_last_modified');

Pero solo quiero el filtro en el bucle de la página de inicio, cuando cambio esa línea a la página de inicio, simplemente no funciona.

<?php
add_filter('posts_orderby', 'orderby_last_modified');
if(have_posts()):
while(have_posts()) atom()->template('teaser');
remove_filter('posts_orderby', 'orderby_last_modified');
?>
    
pregunta Shixons 02.02.2012 - 02:15

1 respuesta

4

No funciona en su plantilla porque la consulta ya se realizó antes de que se cargue la plantilla. Si desea agregar su filtro solo bajo ciertas condiciones, necesita conectar una acción anterior, como pre_get_posts , y compruebe si la consulta es para la página de inicio:

function add_my_orderby_filter( $query ) {
    if ( $query->is_home ) {
        add_filter('posts_orderby', 'orderby_last_modified');
    }
}
add_action( 'pre_get_posts', 'add_my_orderby_filter' );

Esto iría en tu functions.php junto con tu función orderby_last_modified .

Consulte la Referencia de acción de WordPress para ver las acciones de orden que se ejecutan en una solicitud.

    
respondido por el Milo 02.02.2012 - 03:08

Lea otras preguntas en las etiquetas