Cómo hacer que mi tipo de publicación personalizada se muestre en las publicaciones recientes usando "pre_get_posts"

2
  1. Creé un tipo de publicación personalizado (llámelo "my-post-type").
  2. Creé una página archive-my-post-type.php para mostrar todos los tipos de publicaciones personalizadas.
  3. Al mirar la sección "Publicaciones recientes" de la barra lateral, noté que no se muestra ninguno de los tipos de publicaciones personalizadas .
  4. Me gustaría que los tipos de publicaciones personalizadas se muestren también en las publicaciones recientes .
  5. He leído este artículo aquí en la pila WP que dice que puedo usar pre_get_posts para agregar mi publicación personalizada Escriba a las publicaciones recientes (barra lateral).
  6. Lo intenté. Eso no funcionó.

Entonces ...

Hice una investigación sobre pre_get_posts y por lo que puedo decir ...

  • pre_get_posts se utiliza para modificar el bucle principal .

También el códice da esta advertencia:

  

Identificación de consultas de destino

     

Cuando utilice pre_get_posts, tenga en cuenta la consulta que está cambiando. Uno   Una herramienta útil es is_main_query (), que puede ayudarlo a garantizar que la   La consulta que está modificando es solo la consulta principal .

  • La frase "consultas de destino" en el título parece (para mí) para dar a entender que puedo "objetivo" qué consulta quiero para modificar.
  • También el código de la pila también no no usa is_main_query() .
  • Entonces, me pregunto ... ¿son "Publicaciones recientes" NOT parte de la "consulta principal"?

Así que agregué algo de código para ver exactamente qué consultas se ejecutaron en la página y vi dos consultas ...

Esta consulta estaba por encima de toda la página (seguida de todas mis publicaciones personalizadas) ...

'SELECT SQL_CALC_FOUND_ROWS  wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'press-release' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10'

La otra consulta estaba por encima de la barra lateral ...

'SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_date DESC LIMIT 0, 5'

Me gustaría agregar mi tipo de publicación personalizada a esta consulta.

PUEDO (y DEBERÍA) lograr esto usando pre_get_posts?

Soy bastante verde, así que realmente espero que esta pregunta tenga sentido.

    
pregunta sleeper 12.05.2013 - 08:05

1 respuesta

5

Bueno, NO DEBE usar pre_get_posts , ya que alterará TODAS las consultas en el sitio.

Además, la consulta realizada por el complemento de publicaciones recientes no es la consulta principal. La consulta principal se realiza para mostrar la página actual, después de analizar las variables de consulta de la URL, y es responsable, entre otras cosas, de la plantilla de la página actual.

Lo que DEBES hacer es un filtro más ligero widget_posts_args :

add_filter( 'widget_posts_args', 'wp130512_recent_posts_args');

/**
 * Add CPTs to recent posts widget
 *
 * @param array $args default widget args.
 * @return array $args filtered args.
 */
function wp130512_recent_posts_args($args) {
    $args['post_type'] = array('post', 'my_CPT');
    return $args;
}

O

extiende la clase de widget de publicaciones recientes ( WP_Widget_Recent_Posts ) para tener más control.

Código de ejemplo: enlace

    
respondido por el Dan Ștefancu 12.05.2013 - 14:22

Lea otras preguntas en las etiquetas