Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Pires

Ordernar por meta_query

Recommended Posts

No meu site tenho uma lista com várias empresas da categoria que o usuário escolheu. Essas empresas aparecem em ordem de pacote (ouro, prata e bronze) e, dentro de cada pacote por ordem alfabética. Abaixo está o código disso que estou falando.

Acontece que, gostaria que antes de se ordernar alfabeticamente, acontecesse um filtro de PESO. A custom_field peso já está implementada.

Uma empresa tem o pacote ouro, porém seu nome começa com Z e ele quer aparecer nas cabeças, então o mesmo compraria peso, que são em números inteiros. Pode ser ASC ou DESC, o importante é o sistema diferenciar, dentro de cada pacote, primeiro o peso de depois a ordem alfabética.

Nessa ordem: PACOTE ==> PESO ==> ALFABÉTICA

$term = get_queried_object()->term_id;
				$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
				$args = array(
					'posts_per_page' => 10,
					'order' => 'ASC',
					'post_type' => 'guiacomercial',
					'paged' => $paged,
					'tax_query' => array(
						array(
							'taxonomy' => 'categori',
							'terms' => $term,
							'field' => 'term_id'
						)
					),
					'orderby' => 'meta_value',
					'meta_key' => 'plano_do_cliente',
					'meta_query' => array(
						'relation' => 'AND',
						array(
							'key' => 'plano_do_cliente',
							'value' => array(1, 2, 3),
							'compare' => 'IN',
						),
						array(
							'key' => 'peso',
						)
					)
					
				);
				query_posts($args);
				if ( have_posts() ) : while ( have_posts() ) : the_post();

No código, a key PESO ainda não faz diferença.

Seguinte a imagem anexada, gostaria que o estabelecimento TESTE2 viesse primeiro que o GORDUCHOS, pois seu peso é maior.

10386045_4156316323025_35766744_o.jpg?oh


Pelo que percebi, o campo 'meta_query' não precisa estar ali. Quem manda é o 'meta_key'. Se ele estiver com 'plado_do_cliente', a ordem é pelo pacote do cliente, mas se ele estiver seta com 'peso', ele ordena por peso.

Eu quero que ele seja ordenado pelos dois, primeiramente por pacote e dentro do pacote, por peso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de ninguém responder, abaixo segue a solução da questão: Ordernar os posts pelo valor de duas meta_key

<?php
			
			$args = array(
					'posts_per_page' => 10,
					'post_type' => 'guiacomercial',
					'paged' => $paged,
					'orderby' => 'meta_value_num',
					'meta_key' => 'plano_do_cliente',
					'meta_query' => array(
						'relation' => 'AND',
						array(
							'key' => 'plano_do_cliente',
							'value' => array(1, 2, 3),
							'compare' => 'IN',
						),
						array(
							'key' => 'peso',
						),
					)
				);
			
			add_filter( 'posts_orderby', 'filter_query' );
			$query = new WP_Query( $args );
			remove_filter( 'posts_orderby', 'filter_query' );
			
			function filter_query( $q ) {
				global $wpdb;
				return " {$wpdb->postmeta}.meta_value ASC, mt2.meta_value DESC";
			}
			
			while($query->have_posts()) : $query->the_post();
			
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aproveitando, tenho um consulta e precisaria adicionar mais um clausula a esta consulta, usando o meta_key, cara como começar a usar isso? usando o valor desta nova meta_key diretamente de um campo criado por mim no banco.

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.