plugin keywords how etiquetas ejemplos wordpress sorting custom-post-type meta-key

wordpress - keywords - meta tags generator



¿Cómo ordenar por múltiples claves meta? (5)

De la documentación de WP_Query , use meta_query y rellene con una matriz de meta clave / valores:

$args = array( ''post_type'' => ''product'', ''meta_query'' => array( array( ''key'' => ''color'', ''value'' => ''blue'', ''compare'' => ''NOT LIKE'' ), array( ''key'' => ''price'', ''value'' => array( 20, 100 ), ''type'' => ''numeric'', ''compare'' => ''BETWEEN'' ) ) ); $query = new WP_Query( $args );

Estoy usando un bucle personalizado para mostrar mis eventos en una página, lo ordeno bien para la fecha de inicio del evento usando lo siguiente:

$args = array( ''post_type'' => ''event'', ''order'' => ''ASC'', ''orderby'' => ''meta_value'', ''meta_key'' => ''_event_start_date''); $loop = new WP_Query( $args );

Pero la opción meta_key solo permite un valor. ¿Cómo usar dos valores ( _event_start_date y _event_start_time )?


Esto es algo para lo que WordPress agregó soporte en 4.2: https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

En tu caso, probablemente querrás hacer algo como esto:

$args = array( ''post_type'' => ''event'', ''meta_query'' => array( ''relation'' => ''AND'', ''event_start_date_clause'' => array( ''key'' => ''_event_start_date'', ''compare'' => ''EXISTS'', ), ''event_start_time_clause'' => array( ''key'' => ''_event_start_time'', ''compare'' => ''EXISTS'', ), ), ''orderby'' => array( ''event_start_date_clause'' => ''ASC'', ''event_start_time_clause'' => ''ASC'', ), ); $loop = new WP_Query( $args );


Puede ordenar en una sola tecla, de múltiples. Al igual que:

$events = get_posts(array( ''post_type'' => ''my_event'', ''post_status'' => ''publish'', ''meta_query'' => array( array( ''key'' => ''my_event_type'', ''value'' => ''aGoodOne'' ), array( ''key'' => ''my_event_start'', ''value'' => time(), // in this case, only grabbing upcoming events ''compare''=> ''>'', ''type'' => ''NUMERIC'' // assuming value is unix timestamp ) ), ''meta_key'' => ''my_event_start'', // we''re sorting on the start time key ''orderby'' => ''meta_value_num'', // it''s a numeric value ''order'' => ''ASC'' // in chrono order ));

La clave aquí es que meta_key especifica qué clave estamos ordenando, de las que usamos para obtener nuestros registros con meta_query .


Tienes que usar meta_query al agregar tus claves de metadatos como todos dicen, pero también tienes que personalizar orden por función.

$args = array( ''post_type'' => ''event'', ''meta_key'' => ''_event_start_date'', ''meta_query'' => array( array(''key'' => ''_event_start_date''), array(''key'' => ''_event_start_time'') ), ); add_filter(''posts_orderby'',''customorderby''); $loop = new WP_Query( $args ); remove_filter(''posts_orderby'',''customorderby'');

Y pon esto en tus funciones.

function customorderby($orderby) { return ''mt1.meta_value ASC, mt2.meta_value ASC''; }

Puede leer más en http://dotnordic.se/sorting-wordpress-posts-by-several-numeric-custom-fields/


add_action( ''pre_get_posts'', ''pre_get_posts_programpunkter'' ); function pre_get_posts_programpunkter( $query ) { if( !is_admin() && is_post_type_archive( ''programpunkt'' ) && $query->is_main_query() ) { $query->set( ''orderby'', ''meta_value'' ); $query->set( ''meta_key'', ''event-date'' ); $query->set( ''meta_query'', array( ''relation'' => ''AND'', array( ''key'' => ''event-date'', ''compare'' => ''EXISTS'' ), array( ''key'' => ''event-start'', ''compare'' => ''EXISTS'' ) ) ); $query->set( ''order'', ''ASC'' ); } } add_filter(''posts_orderby'', ''programpunkter_orderby''); function programpunkter_orderby( $orderby ) { if( get_queried_object()->query_var === ''programpunkt'' ) { global $wpdb; $orderby = str_replace( $wpdb->prefix.''postmeta.meta_value'', ''mt1.meta_value, mt2.meta_value'', $orderby ); } return $orderby; }