Consultar un tipo de publicación personalizada basado en ID de publicación y valor de campo personalizado

4 feb 2013, 23:33:11
Vistas: 1.55K
Votos: 0

Puede que exista una respuesta en algún lugar, pero no logro encontrarla o reconocerla si la viera. Esta es la situación:

Tengo un tipo de publicación personalizada 'region' que se muestra en single-region.php. Los nombres de región son Norte, Sur, Este, Oeste.

Tengo otro tipo de publicación personalizada 'news'. Asociado a él hay un campo personalizado llamado 'news_region'. Cuando se crea una noticia, el autor debe especificar un valor para news_region (Todos, N, S, E, W).

Lo que me gustaría que ocurriera es que, cuando esté en la página de la región Norte, se listen todas las noticias con valor de news_region "Todos" O "N".

VERSIÓN FINAL QUE FUNCIONA (gracias a @milo por orientarme en la dirección correcta):

// obtener título de la página de región para comparar con la clave news_region
$this_region = get_the_title($post->ID);
// consultar noticias con news_region Todos o $this_region
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 4,
    'meta_query' => array(
    'relation' => 'OR',
        array(
            'key' => 'news_region',
            'value' => 'Todos',
            'compare' => 'LIKE'
            ),
        array(
            'key' => 'news_region',
            'value' => $this_region,
            'compare' => 'LIKE'
            )
        )
    );
$newslist = new WP_Query( $args );

NOTA: cambié los valores de news_region a 'Todos, Región Norte, Región Este, Región Sur, Región Oeste' para que coincidan con los nombres completos de las regiones (igual que el título de la publicación en single-region.php).

2
Comentarios

¿Qué código estás usando actualmente para esa página de "Región Norte"?

s_ha_dum s_ha_dum
5 feb 2013 00:41:39

Actualmente estoy usando una consulta estándar que enumera todos los elementos de noticias en todos los singles de región.

Ray Gulick Ray Gulick
5 feb 2013 14:35:40
Todas las respuestas a la pregunta 2
2

Si te entiendo correctamente, quieres una comparación IN para news_region en una meta_query que busque All (Todos) o la primera letra del título de la publicación de la región actual (N, S, E, W)

// obtener la primera letra del título de esta publicación de región
$this_region = substr($post->post_title, 0, 1);
// consultar artículos de noticias con news_region All o $this_region
$args = array(
    'post_type' => 'news',
    'meta_query' => array(
        array(
            'key' => 'news_region',
            'value' => array( 'All', $this_region ),
            'compare' => 'IN'
        )
    )
);
$news_posts = new WP_Query( $args );
5 feb 2013 00:45:16
Comentarios

No. No estoy tratando de comparar las primeras letras. Estoy intentando mostrar elementos de noticias con el campo personalizado 'SE' adjunto (podrían haber más regiones más adelante) cuando esté en la página de la Región Sureste, y elementos de noticias con el campo personalizado 'SW' cuando esté en la página de la Región Suroeste. Puedo ver una pista sobre cómo hacer que tu código funcione usando los campos personalizados asignados a los elementos de noticias. Lo intentaré y volveré. Gracias.

Ray Gulick Ray Gulick
5 feb 2013 14:34:37

Cambié los valores de los campos personalizados de iniciales al nombre completo de las regiones. Entonces, pensé que podría compararlos con los nombres de las regiones en las páginas de regiones (North Region es tanto el título de la publicación de una página de región, como un valor del campo personalizado news_region. Sin embargo, estoy teniendo problemas con esto. Mi modificación de tu código no parece capturar el título del tipo de publicación de región para la comparación. Agregaré el código a mi pregunta original.

Ray Gulick Ray Gulick
5 feb 2013 15:06:22
0

La respuesta de @Milo es correcta si deseas resolver el problema con la solución que estás proponiendo, pero creo que convertir "Regiones" en una taxonomía tiene mucho más sentido. (Para un poco de contexto, lee el Problema XY). Esto se debe a que el comportamiento de tu tipo de entrada "Región" es exactamente el comportamiento de una página de archivo de taxonomía predeterminada. Las taxonomías también vienen con una interfaz de usuario más agradable.

Además, los términos de taxonomía tienen un campo de descripción por defecto. Aunque no está habilitado en todos los temas, es bastante fácil de agregar a tu plantilla taxonomy-region.php (eso asumiendo que crees una taxonomía llamada region).

Finalmente, el campo de descripción del término es texto plano por defecto, pero el plugin Rich Text Tags agrega un bonito editor WYSIWYG para solucionar eso.

5 feb 2013 01:29:28