posts2posts consulta usando el problema de matriz connected_items [cerrado]

3

Mi configuración es la siguiente

Tengo un tipo de publicación personalizado llamado 'eventos' y un tipo de publicación personalizado llamado 'géneros' que vinculo con el complemento Posts2Posts de scribu. Cada evento puede tener varios géneros vinculados a él.

Lo que me gustaría hacer

En una página de eventos , me gustaría mostrar otros eventos relacionados en función de los géneros que tiene el evento actual.

Lo que creo que debo hacer

  1. Ejecutar una consulta que obtiene todos los ID de géneros del evento actual
  2. Pase estos ID en una segunda consulta que encuentre todos los eventos que tienen uno o más de estos géneros vinculados a ella

Tengo una consulta p2p que me gustaría mostrar todos los eventos que tienen un AND / OR más de los géneros dados en connected_items. Los paso como una matriz, al igual que en la documentación.

Para ilustrar mi resultado, digamos que

  • event1 ha vinculado géneros con las ID 1240, 1241, 1242 y 1250
  • event2 ha vinculado géneros con las ID 1240, 1241 y 1260
  • event3 ha vinculado géneros con las ID 1241 y 1242

En la primera consulta obtengo todos los ID de género, esto funciona.

La segunda consulta que obtiene todos los eventos con los géneros dados (los paso como una matriz):

$args = array(
        'connected_type' => 'genres_to_events',
        'connected_items' => array(1240,1241,1242),
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );

$query = new WP_Query($args);

Lo que pasa es que la salida comprueba cada conexión en la matriz y, por lo tanto, la salida de la consulta es:

  • evento1
  • evento1
  • evento1
  • evento2
  • evento2
  • evento3
  • evento3

Pero me gustaría mostrar cada evento una vez basado en si tiene uno o más de los géneros conectados a él. No creo que esto se explique en la documentación, ¿alguna idea?

    
pregunta eskimo 27.08.2013 - 15:37

2 respuestas

0

Ah, creo que entiendo. Creo que lo que deberías hacer con tu primer bucle, es conectar los géneros conectados como dices. Luego desea obtener todos los eventos relacionados con ellos, por lo que debe reunir solo los ID (recopilarlos en una matriz) en un bucle y luego utilizar array_unique() para eliminar todos los duplicados. Use esta matriz limpia en un bucle para obtener solo esas publicaciones en ese momento. ¿Tiene sentido?

Entonces, algo como esto podría funcionar:

$args = array(
        'connected_type' => 'genres_to_events',
        'connected_items' => array(1240,1241,1242),
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );

$query = new WP_Query($args);

$connected_out = array();

while($query->have_posts()) : $query->the_post();
    $connected_out[] = $post->ID;
endwhile;

$connected_out = array_unique($connected_out);
wp_reset_query();

$args = array(
    'post__in' => $connected_out;
);

$query = new WP_Query($args);
// go!
    
respondido por el GhostToast 29.08.2013 - 15:13
0

Estoy publicando esto como una respuesta ya que es parcialmente y porque necesito más caracteres de los disponibles en los comentarios. Espero que esté bien :-).

Entonces, encontré el problema posts_per_page después de leer esta publicación .

Es posible pasar argumentos a la función get_related , aunque parece que tendrías que modificar el núcleo p2p. Lo que hice fue agregar mi propia función get_related , llamada my_get_related .

El código es el siguiente:

public function my_get_related( $item, $extra_qv = array(), $output = 'raw' ) {
        $extra_qv['fields'] = 'ids';

        $connected = $this->get_connected( $item, $extra_qv, 'abstract' );

        $additional_qv = array( 'p2p:exclude' => _p2p_normalize( $item ), 'posts_per_page' => -1 );

        return $this->flip_direction()->get_connected( $connected->items, $additional_qv, $output );
    }

He agregado esto en wp-content / plugins / posts-to-posts / core / directed-connection-type.php (la función original get_related está en la línea 94).

Puede ver el argumento 'posts_per_page' agregado, se puede agregar más fácilmente separándolos con comas.

Ahora todavía tengo una pregunta: ¿cómo declaro esta función fuera del archivo principal p2p? No quiero agregarlo allí ya que podría ser contraproducente al actualizar el complemento. Me gustaría agregarlo a mi functions.php (uso el tema Roots, por lo que estará en un archivo distinto de functions.php, pero es lo mismo que ponerlo allí ya que el archivo que pondré es un include de funciones.php).

He intentado public function my_get_related... y add_action('p2p_init', 'my_get_related') pero eso no funciona.

¿Alguna idea sobre cómo agregar esta función fuera del núcleo?

Creo que después de eso, el problema finalmente se resuelve :-)

    
respondido por el eskimo 30.08.2013 - 13:43

Lea otras preguntas en las etiquetas