Pregunta

( Nota del Moderador: el título original de la pregunta era: "Consulta personalizada: Mostrar tipos de envíos personalizados además de tipo personalizado posterior con meta post en la página principal del blog")

Estoy en necesidad de ayuda con una consulta personalizada. Tengo tres tipos de envíos personalizados: "Noticias" , "Eventos" , "Historias" . En la página principal del blog, solamente Noticias y Eventos mostrarán. El cliente puede elegir marcar una historia como Noticias utilizando características de la Verve Meta Cajas . Si un puesto de historias tiene una clave de post meta de 'mark-as-news' entonces el mensaje que debe aparecer en la página principal del blog también.

Así que lo que necesito ayuda con la escritura es la siguiente:

Si historias tiene meta de post 'mark-as-news' continuación, el blog principal página mostrará los tipos personalizados de correos Noticias y eventos, así como las historias, en orden descendente.

Por favor alguien puede ayudar?

Gracias!

Editar:

Tal vez una mejor forma de redacción sería:?

Mostrar tipos de envíos personalizados y Noticias Eventos, y si no es la clave 'mark-as-news' para post_meta, espectáculo Historias.

¿Fue útil?

Solución

Hola @webcodeslinger:

Esto es lo que una consulta MySQL básico para cargar Noticias y Eventos vería como (esto se simplifica en gran medida de lo que realmente hace WordPress):

SELECT * FROM wp_posts WHERE post_type IN ('news','events') 

Lo que se quiere en cambio, es algo como esto (hay formas más performant de hacer esto en MySQL pero son más complejos en WordPress y para la mayoría de los sitios que nunca notará una diferencia):

SELECT * FROM wp_posts WHERE post_type IN ('news','events') 
  OR (post_type='stories' AND ID IN 
    (SELECT post_id FROM wp_postmeta WHERE meta_key='mark-as-news')
  )

Así que ... para añadir que SQL extra para usar consulta de su bucle principal 'posts_where' un gancho. Se puede poner el siguiente código de enlace en el archivo functions.php de su tema (en la parte inferior del archivo va a hacer) o en uno de los archivos .php de un plugin si está creando un plugin:

add_action('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wp_the_query;
  if (is_home() && $query===$wp_the_query) { // This means home page and the main loop
    global $wpdb;
    $where .= " OR ({$wpdb->posts}.post_type='actor' AND " . 
              "{$wpdb->posts}.ID IN (" . 
                "SELECT post_id FROM {$wpdb->postmeta} " .
                "WHERE meta_key='mark-as-news')) ";
  }
  return $where;
}

Otros consejos

Lo que queremos es fácil de describir, pero es difícil conseguir trabajar con la API de WP. No había visto agradable y ordenado solución hasta el momento.

Básicamente consulta WP es un envoltorio de lujo para la consulta SQL que se filas colocar la base de datos. Lo que queremos es prácticamente dos consultas diferentes para dos conjuntos diferentes de mensajes. WP no maneja actualmente como o lógica en las consultas.

Puede hacer dos consultas y combinar los resultados, pero en ese caso, será difícil conseguir la paginación derecha.

Esta es probablemente una de las razones temas en formato de revista se hizo popular, porque se especializan en mostrar varios conjuntos de mensajes en varias áreas, en lugar de luchar con la compleja mezcla de contenido.

Licenciado bajo: CC-BY-SA con atribución
scroll top