Reemplazar consulta principal con consulta personalizada

2

Quiero reemplazar la consulta principal con mi propia consulta personalizada. La cosa es que no quiero pasar por la molestia de la paginación manual. Sé que hay un filtro posts_results pero no estoy seguro de cómo usarlo exactamente, no pude encontrar un montón de información sobre él. Parece que pre_get_posts solo está modificando la consulta en lugar de reemplazarla por completo. Intenté simplemente volcar mi consulta en $posts pero luego perdí la paginación. ¿Hay alguna forma de evitar esto?

Estoy usando $posts = wpdb->get_results($query); para reemplazar la consulta principal con la mía.

$query es mi SQL personalizado. Estoy agregando el fragmento de arriba a la derecha debajo de get_header() . Estoy intentando editar la consulta principal en mi página de taxonomía personalizada: taxonomy-mytax.php .

La situación

Actualmente, mi cliente tiene Fabricantes (Taxonomía) y Productos (Taxonomía) y luego un Producto real (Tipo de publicación personalizada). Solicitaron mostrar publicaciones de productos (en la página de categoría de productos - taxonomy-producttax.php ) en un pedido de su fabricante más favorable (taxonomía). Así que agregué un campo adicional a la taxonomía del fabricante donde pueden establecer un número que declara un pedido. Este número se guarda en $wpdb->terms.term_group . Ahora, en la página de Categoría de productos, estoy tratando de reemplazar la consulta principal por completo con una nueva consulta que obtendrá todos los productos y los pondrá en orden por un fabricante term_group . Tanto el Producto como los Manufactuers (ambas taxonomías) tienen un pedido, y ambos se colocan en $wpdb->terms.term_gruop , lo que fue problemático. Creé una consulta personalizada que funciona y mostraré las publicaciones en orden de los fabricantes term_group . Solo necesito reemplazar la consulta principal en taxonomy-producttax.php con mi consulta SQL personalizada, pero no quería entrar en la paginación manual. Quería usar cualquier cosa que Wordpress haya incorporado para ayudarme.

    
pregunta Howdy_McGee 27.11.2013 - 16:51

2 respuestas

3

No puede reemplazar la consulta principal con la salida de $wpdb . La consulta principal es un objeto WP_Query . $wpdb devuelve una matriz u objeto simple, pero no un objeto WP_Query .

Incluso si pudieras meter el SQL en bruto en una consulta (algo en la parte posterior de mi cabeza me hace pensar que puedes, pero no puedo jurarlo), no es recomendable. Pruebe var_dump($wp_query); y verá que hay mucho más, además de una consulta SQL. Para que el objeto funcione, incluida la paginación que desea, todas esas otras cosas deben configurarse correctamente.

Es necesario usar pre_get_posts y quizás otros filtros de consulta como posts_where para alterar el objeto WP_Query , no para reemplazarlo. Sin conocer los detalles como @Milo y @ChipBennett han solicitado, pero no está dispuesto a proporcionarlos, no será posible darle una respuesta mucho mayor.

    
respondido por el s_ha_dum 27.11.2013 - 17:20
1
  

Bueno, es una página de archivo de taxonomía. Lo que mi consulta hace es ordenar publicaciones   por un orden de categoría que los usuarios establecen ... Así que necesitaría cambiar   la selección, la unión, el dónde, el orden.

Sin ver su código real, es difícil dar una respuesta más precisa. Sin embargo, además del gancho de acción pre_get_posts , WordPress proporciona varios filtros para manipular la consulta incluso antes:

Es probable que no haya ninguna razón real por la que no pueda manipular la consulta principal para satisfacer sus necesidades:

  

Así que agregué un campo adicional a la taxonomía del fabricante donde   Puede establecer un número que declara una orden. Este número se guarda en   %código%. Ahora en la página de Categoría de Producto que estoy tratando   para reemplazar la consulta principal por completo con una nueva consulta que lo hará   Consigue todos los productos y ordénalos por un fabricante.   %código%. Tanto el Producto como los Manufactuers (ambas taxonomías) tienen un   orden, y ambos se ponen en $wpdb->terms.term_group que fue   molesto. He creado una consulta personalizada que funciona y mostraré las publicaciones.   en fabricantes term_group orden.

    
respondido por el Chip Bennett 27.11.2013 - 17:59

Lea otras preguntas en las etiquetas