• Resuelto Juan Hernando

    (@unintended8)


    Buenas!
    En una página tengo que mostrar debajo de la ficha de una persona una serie de entradas que, bien sean porque las ha escrito con su usuario (sea el autor), o bien estén etiquetadas con su nombre (las ha escrito otro, pero tienen un tag para identificarlo). He estado buscando info en el códex sobre cómo hacerlo en un WP_Query, y así como hay la opción de tax_query con AND/OR para taxonomías, al ser en este caso una de las opciones el campo author no he visto manera.

    Al final he hecho una query para sacar los posts del autor, otra para sacar los posts en los que está etiquetado, lo he juntado en un array y he hecho una tercera query para sacar los posts con las IDs correspondientes.

    Es una página con pocos posts, con lo cual no me supone una carga muy grande, pero mi duda es si sabéis de una manera más elegante o avanzada de resolver este problema. Os dejo el código utilizado ($aut y $tag son valores de ID que saco antes). ¡Gracias!

    $args1 = array(
    	'posts_per_page'  => -1,
    	'author'          => $aut,
    	'fields' 	  => 'ids',
    );
    $author_query = new WP_Query( $args1 );
    
    $args2 = array(
    	'posts_per_page'  => -1,
    	'tag_id'          => $tag,
    	'fields' 	  => 'ids',
    );
    $tag_query = new WP_Query( $args2 );
    
    $final_query = array_merge($author_query->posts, $tag_query->posts);
    $posts_query  = new WP_Query( array( 'post__in' => $final_query ) );
    • Este debate fue modificado hace 6 años, 5 meses por Juan Hernando.
Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Puedes construirlo en una sola query diciéndole «Autor es igual a $aut O Tag ID es igual a $tad», ese O es el 'relation' => 'OR' mira esta entrada a ver si te ayuda https://www.billerickson.net/code/wp_query-arguments/ si no sale dínoslo y la construimos 😉

    Iniciador del debate Juan Hernando

    (@unintended8)

    El tema es que el ‘relation’ sólo es válido dentro del array tax_query que mira categorías, etiquetas u otras taxonomías. Me valdría para posts que estuvieran en la categoría X o con la etiqueta Y, pero el autor es otro tipo de parámetro que no encaja ahí, por eso la solución que encontré. Más que nada era por si alguno se había encontrado algo similar, ¡gracias de todos modos Carlos!

    Por practicar un poco… 😉

    function pc_custom_sql ( $aut, $tag ){
    
    	global $wpdb;
    	
    	$sql_query =
    		"SELECT p.post_title AS title, 
    				p.post_content AS content, 
    		FROM {$wpdb->posts} AS p
    		LEFT JOIN {$wpdb->term_relationships} AS tr ON (p.ID = tr.object_id)
    		LEFT JOIN {$wpdb->term_taxonomy} AS tt ON (tt.term_taxonomy_id = tr.term_taxonomy_id)
    		WHERE p.post_status = 'publish' 
    			AND p.post_type = 'post' 
    			AND tt.taxonomy = 'category'
    			AND ( p.post_author IN ({$aut}) OR tt.term_id IN ({$tag}) )";
    
    	$sql_query = $wpdb->prepare( $sql_query );
    
    	$results = $wpdb->get_results( $sql_query );
    	
    	if ( ! $results || ! is_array( $results ) ) {
    		echo false;
    	}
    
    	return $results;
    }

    pd: revisarlo xD es sólo una idea

    • Esta respuesta fue modificada hace 6 años, 5 meses por pablocianes. Razón: p.author -> p.post_author

    Si Juan, tienes razón, no me había fijado (las prisas), la solución de @pablocianes te daría el resultado en una única consulta, es el mismo problema comentado aquí

    Iniciador del debate Juan Hernando

    (@unintended8)

    Gracias chicos, le echaré un ojo a la opción de Pablo, aunque no tengo mucha experiencia llamando directamente a la base de datos. Lo estudiaré con calma 😉

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘WP_Query de Autor o Etiqueta’ está cerrado a nuevas respuestas.