Ordem por Meta Value, Pro primeiro, então livre
-
-
Bem-vindo ao WPSE.Para começar você,sinta-se à vontadepara visitarnossapágina [TOUR]para se sentirem como o site opera.Visitetambém [Ajuda]para qualquerpergunta relacionada ao site.Para voltar à suapergunta,sópreciso desmarcar algunsproblemas,você querbuscarposts de umameta-chave com Freee Pro como valores demeta.Digamos que você obtenha 10posts,4proe 6grátis,os 4postspro devem sermostradosprimeiro,depois o outro 6grátis.Apenas uma dica,não use `Query_Posts`,em vez de usar` wp_query`Welcome to WPSE. To start you off, please feel free to visit our [tour] page to get a feel on how the site operate. Also visit [help] for any site related questions. To come back to your question, I just need to clear some issues, you want to randomly fetch posts from a meta key with free and pro as meta values. Say you get 10 posts, 4 pro and 6 free, the 4 pro posts must be shown first, then the other 6 free. Just a tip, do not use `query_posts`, rather use `WP_Query`
- 0
- 2014-10-13
- Pieter Goosen
-
k obrigado significa queeu usei very_postsem - Função INBUILT do.Tax-list.php Entãoeupreciso criarnovo arquivo cat.php?paranovo loop?ou usado WPnomesmo arquivo?k thanks means i used query_post in - inbuild function of theme. tax-list.php so i need to create new cat.php file ? for new loop ? or used wp in same file ?
- 0
- 2014-10-13
- itcgpit mark
-
Use omesmo arquivo,basta alterar "Query_posts"para `WP_Query`.Além disso,porfavor conselhos sobre omeu último comentário se éisso que vocêestátentandofazerUse the same file, just change `query_posts` to `WP_Query`. Also, please advice on my last comment whether this is what you are trying to do
- 0
- 2014-10-13
- Pieter Goosen
-
Vocêestoutentando como. Napágina da listagem de categorias Post Type=listing meta value=proe grátis,masprimeiro displayproentão livre .so ordempormeta valor ordem desc WP_Query ($ query_string. '& Orderby=meta_value_num'); Liguepara afunçãoindefinida WP_Query () erroya i am trying like. in page of category listing post type = listing meta value = pro and free but first display pro then free .so order by meta value order DESC WP_Query($query_string . '&orderby=meta_value_num'); Call to undefined function WP_Query() error
- 0
- 2014-10-13
- itcgpit mark
-
Paraexnaminhapágina de categoria,se há 10post,entãoeu quero 10 com aleatório,masmeta valor=proprimeiroe meta_value=grátis.OK . agoratrabalhando aleatório. comtudo ou apenaspostar ou apenas livre.maseu quero ordempormeta valortãofácilparamim resolveressesproblemasfor ex in my category page if there 10 post then i want 10 with random but meta value = pro first then meta_value = free then. ok . right now random working .with all or only post or only free. but i want order by meta value so easy for me to solve this issues
- 0
- 2014-10-13
- itcgpit mark
-
Porfavor,visite [`` wp_query`] (http://codex.wordpress.org/class_reference/wp_query#custom_field_parameters)paraentender como osparâmetros dameta consultafuncioname comoele deve ser construído.Além disso,verifique osparâmetros da OraçãoPlease visit [`WP_Query`](http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters) to understand how the meta query parameters work and how it should be constructed. Also, check the orderby parameters
- 0
- 2014-10-13
- Pieter Goosen
-
2 respostas
- votos
-
- 2014-10-13
Antes de disparar,apenas umanota,nunca (minha ênfase)faz uso de
query_posts
Para criar consultaspersonalizadas.
Nota: Estafunçãonão deve ser usadaporplugins outemas. Conformeexplicadomaistarde,há opçõesmelhorese maisperformáticaspara alterar a consultaprincipal. Query_Posts () é umamaneiraexcessivamente simplistae problemática demodificar a consultaprincipal de umapágina,substituindo-a com umanovainstância da consulta. Éineficiente (re-executa consultas SQL)e iráfalharimediatamenteem algumas circunstâncias (especialmentemuitas vezes ao lidar com apaginação dosposts).
prefira uso de
WP_Query
ouget_posts
Para criar consultaspersonalizadas,mas somente se você Não épossívelmodificar a consultaprincipal compre_get_posts
. Paramaisinformações,confira EstapostagemAssumindo queexistem apenas dois valorespara o seu
meta_key
( Porfavor,note: Parafins deteste,useiminhaprópriameta-chave,você deve substituirissopor suaprópria ),nomeadamentepro
efree
,vocêpode apenas recuperarposts quepossuemestemeta_key
. Sua consulta seráentão algo assim:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
Se vocêtivermais valores do que apenasesses dois,precisará ajustar sua consultaparaincluir o
meta_value
e,em seguida,fazer uso doparâmetrometa_compare
. Sua consulta ajustada seráentão:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
(ps! Antes de continuar,você deve observar que oparâmetro
orderby
foi alteradona versão 4.0,masissonãofuncionaránestainstância.ótimo,vocêterá 5posts queforam recuperados aleatoriamente,quetem um
meta_value
depro
oufree
Agoraprecisamos resolvê-los. Amelhor soluçãopossível éfazer uso de
usort
Classificar amatriz de retornada depostsem$the_query->posts
de acordo com o valor daspostagensmeta_value
. Vocêprecisaráentãonão obter$the_query->posts
e,em seguida,redefini-lo com amatriz depost reordenada.Aquiestá o código completo:
<?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?>
Você sóprecisará ajustar as variáveis de consultapara atender às suasnecessidadese também ajustar o loopparaexibir o que énecessário
Estanão é a únicamaneira de alcançá-lo,vocêtambémpodemover suafunção de classificaçãopara suasfunções.phpe segmentarespecificamenteessa consultapersonalizada
Before I fire away, just one note, NEVER (my emphasis) make use of
query_posts
to create custom queriesNote: This function isn't meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).
Rather make use of
WP_Query
orget_posts
to create custom queries, but ONLY if you can't modify the main query withpre_get_posts
. For more info, check out this postAssuming that there are only two values for your
meta_key
(PLEASE NOTE: For testing purposes, I have used my own meta key, you should replace this with your own), namelypro
andfree
, you can just retrieve posts that has this specificmeta_key
. Your query will then look something like this:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
If you however have more values than just these two, then you will need to adjust your query to include the
meta_value
and then make use of themeta_compare
parameter. Your adjusted query will then become:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
(PS! Before I go on, you should note that the
orderby
parameter has changed in version 4.0, but this will not work in this instance.Great, you will now have 5 posts that was retrieved randomly which has either a
meta_value
ofpro
orfree
Now we need to sort them. The best possible solution is to make use of
usort
to sort the returned array of posts in$the_query->posts
according to the value of the postsmeta_value
. You will then need to unset$the_query->posts
and then reset it with the reordered post array.Here is the complete code:
<?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?>
You will just need to adjust the query variables to suit your needs and also adjust the loop to display what is needed
This is not the only way to achieve it though, you can also move your sorting function to your functions.php and specifically target this custom query
-
Eutenhoproprimeiro,bem como agradecimentos aleatórios.Mas agora seu resultado deexibição comotodopost ..maseu quero apenaspara a categoria Perticuler.comoeu clicona categoriae eu queropost de apenasessa categoria obrigado tambémminhapostagemtipo=listagemye i got pro first as well as random thanks . but now its display result as all post.. but i want only for perticuler category. like i click on categoryand i want post of only that category thanks also my post type = listing
- 0
- 2014-10-15
- itcgpit mark
-
Basta adicionar `'cat'=>get_queried_object ('gato') -> cat_id,`para seus argumentosJust add `'cat' => get_queried_object('cat')->cat_ID,` to your arguments
- 0
- 2014-10-15
- Pieter Goosen
-
Obrigado recebi aproduçãoperfeitanobanco de dados.Quandoeupassar a saída SQL.Agoraeu sóprecisomudarem HTML significaparte ECHO.ASL,mas agora seupro depois livre,maseu queroesse valortão aleatório. Obrigado Eutambémpreciso alteraçõesno HTML ou o queeu queroexibirnapágina obrigadothanks i got perfect output in database. when i pass output sql. now i just need to change in html means echo part. asl but right now its pro after free but i want that value as random .?.thanks i also need to changes in html or what i want to display in page thanks
- 0
- 2014-10-15
- itcgpit mark
-
Feliz que é resolvido.Quanto à seção HTML,issoestáfora doescopo desta questão.O HTML Related Stufftambémestáfora dotópiconeste site.Se vocêprecisar de ajuda com aestrutura HTML da suapágina,você devefazer umanovaperguntano Stackoverflow.com,que émais adequadaparaessestipos deperguntas.ObrigadoGlad that is solved. As for the HTML section, that is out of scope of this question. HTML related stuff is also off topic on this site. If you need help with the html structure of your page, you should ask a new question over at stackoverflow.com which is better suited for these type of questions. Thank you
- 0
- 2014-10-15
- Pieter Goosen
-
Muito obrigado você salvoumeu dia.Eutenho dados certos agora sóprecisamosem eco.umtítulo deimageme des.com oformato detema.ok obrigado senhor :)thanks a lot u saved my day. i got right data now just need in echo. an image title and des. with as per theme formate. ok thanks sir :)
- 0
- 2014-10-15
- itcgpit mark
-
Não vaifazerpostporpágina. Isso vai quebrar apaginaçãoem ... !!it will not take post per page.. this will break pagination in ...!!
- 0
- 2014-10-15
- itcgpit mark
-
- 2014-10-13
Vocêprecisa consultarpelo Meta_Key em vez de
Meta_Value
:$ query_string.'& amp;meta_key=name_of_key_that_stores_free_or_pro & amp; orderby=meta_value_num'
You need to query by the
meta_key
instead ofmeta_value
:$query_string . '&meta_key=name_of_key_that_stores_free_or_pro&orderby=meta_value_num'
-
obrigadopor resposta,masnãoestáfuncionandoeu usei query_posts ($ query_string. '&meta_key=j_listing_type & orderby=meta_value_num'); masnãofuncionandothanks for reply but its not working i used query_posts($query_string . '&meta_key=J_listing_type&orderby=meta_value_num'); but not working
- 0
- 2014-10-13
- itcgpit mark
-
Tente apenas 'orderby=meta_value`Try just `orderby=meta_value`
- 0
- 2014-10-13
- TheDeadMedic
-
Eutambémtentoisso,masnãofuncionando :(i try this also but not working :(
- 0
- 2014-10-13
- itcgpit mark
Eu obtenho listaprofissional com aleatório,mas quero
pro
,bem como livre,mas com listapro primeiro,entãometa_value
Listagratuita
.Eutambém defino
orderby
meta_value
Issonãofunciona,e nopadrão de string de consultapara PedeBy
gato
.SeránecessárioData
Com ambosMeta Value=Pro
eFree
.Alguma sugestão?