Ordene por valor meta, primero pro, luego gratis
-
-
Bienvenido a WPSE.Para comenzar,no dudeen visitarnuestrapágina [recorrido]paratener unaidea de cómofuncionael sitio.También visite [ayuda]para cualquierpregunta relacionada conel sitio.Para volver a supregunta,solonecesito aclarar algunosproblemas,desea obtenerpublicaciones al azar de una clavemeta con libre yprofesional como valoresmeta.Digamos que obtienes 10publicaciones,4profesionales y 6gratuitas,las 4publicacionesprofesionales debenmostrarseprimero,luego las otras 6gratuitas.Solo un consejo,no use `query_posts`,másbien use` 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
-
kgracias significa que utilicé query_postsen -funciónincorporada de.tax-list.php así quenecesito crear unnuevo archivo cat.php?para unnuevobucle?o usó wpen elmismo archivo?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
-
Utiliceelmismo archivo,simplemente cambie `query_posts` a` WP_Query`.Además,avise sobremi último comentario siestoes lo queestátratando de hacerUse 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
-
yaestoyintentando como. en lapágina de la lista de categorías tipo depublicación=listado valormeta=pro ygratis,peroprimeromuestrapro y luegogratis. así que ordenapor valormeta orden DESC WP_Query ($ query_string. '& Orderby=meta_value_num'); Llamar a lafunciónno definida WP_Query () errorya 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
-
porejemplo,en mipágina de categoría,si hay 10publicaciones,entonces quiero 10 con aleatorioperometa value=proprimero y luegometa_value=freeentonces.Okay . ahoramismotrabajo aleatorio. contodos o solopublicar o sologratis.pero quiero ordenarpor valormetatanfácilparamí resolveresteproblemafor 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
-
Visite [`WP_Query`] (http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters)para comprender cómofuncionan losparámetros demeta consulta y cómo deben construirse.Además,verifique losparámetros de orderbyPlease 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 respuestas
- votos
-
- 2014-10-13
Antes de disparar,solo unanota, NUNCA (mi énfasis) haga uso de
query_posts
para crear consultaspersonalizadasNota: estafunciónnoestá destinada a ser utilizadapor complementos otemas. Como seexplicamás adelante,existen opcionesmejores ymáseficacesparamodificar la consultaprincipal. query_posts ()es unaforma demasiado simplista yproblemática demodificar la consultaprincipal de unapágina reemplazándola con unanuevainstancia de la consulta. Esineficiente (vuelve aejecutar consultas SQL) yfallará rotundamenteen algunas circunstancias (especialmente cuando setrata de lapaginación depublicaciones).
En su lugar,utilice
WP_Query
oget_posts
para crear consultaspersonalizadas,pero SOLO sino sepuedemodificar la consultaprincipal conpre_get_posts
. Para obtenermásinformación,consulte estapublicaciónSuponiendo que solo hay dos valorespara su
meta_key
( TENGA EN CUENTA: Parafines deprueba,he usadomi propiameta clave,debe reemplazarla con la suyapropia ),es decir,pro
yfree
,puede recuperarpublicaciones quetenganestameta_key
específica. Su consulta se verá así:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
Sinembargo,sitiene más valores queestos dos,entonces deberá ajustar su consultaparaincluirel
meta_value
y luego hacer uso delparámetrometa_compare
. Su consulta ajustada se convertiráen:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
( PD! Antes de continuar,debeteneren cuenta queelparámetro
orderby
ha cambiadoen la versión 4.0,peroestonofuncionaráen estainstancia.Genial,ahoratendrás 5publicaciones que se recuperaron aleatoriamente y quetienen un
meta_value
depro
ofree
Ahoratenemos que ordenarlos. Lamejor soluciónposiblees usar
usort
para ordenar lamatriz depublicaciones devueltaen$the_query->posts
de acuerdo conel valor de laspublicacionesmeta_value
. Luego deberá desarmar$the_query->posts
y luego restablecerlo con lamatriz depublicaciones reordenada.Aquíestáel 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(); ?>
Solonecesitará ajustar las variables de consultapara que se adapten a susnecesidades ytambién ajustarel cicloparamostrar lo que senecesita
Sinembargo,estanoes la únicaforma de lograrlo,tambiénpuedemover sufunción de clasificación a sufunctions.php y apuntarespecíficamente aesta 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
-
sí,obtuveprofesionalprimero ygracias al azarpero ahora su resultado de visualización comotodas laspublicaciones ...pero solo quieropara la categoríaperticuler.como si hago clicen la categoría y quieropublicar soloesa categoríagracias tambiénmi tipo depublicación=listadoye 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
-
Simplemente agregue '' cat '=>get_queried_object (' cat ') -> cat_ID,`a sus argumentosJust add `'cat' => get_queried_object('cat')->cat_ID,` to your arguments
- 0
- 2014-10-15
- Pieter Goosen
-
gracias obtuve un resultadoperfectoen labase de datos.cuandopaso la salida sql.ahora solonecesito cambiaren html significaparte deeco.aslpero ahoraespro después degratis,pero quiero queese valor sea aleatorio.?.gracias tambiénnecesito cambiosen html o lo que quieromostraren lapáginagraciasthanks 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
-
Me alegro de queesté resuelto.En cuanto a la sección HTML,estáfuera del alcance deestapregunta.Las cosas relacionadas con HTMLtambiénestánfuera detemaen este sitio.Sinecesita ayuda con laestructura html de supágina,debe hacer unanuevapreguntaen stackoverflow.com que seamás adecuadaparaestetipo depreguntas.GraciasGlad 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
-
muchasgraciasme salvasteel día.Tengo los datos correctos ahora solo losnecesitoen eco.untítulo deimagen y des.con segúnformato detema.okgracias señor :)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
-
no aceptarápublicacionesporpágina ... ¡¡esto romperá lapaginaciónen ... !!it will not take post per page.. this will break pagination in ...!!
- 0
- 2014-10-15
- itcgpit mark
-
- 2014-10-13
Debe consultarpor
meta_key
en lugar demeta_value
:$query_string . '&meta_key=name_of_key_that_stores_free_or_pro&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'
-
graciaspor la respuestaperonofunciona query_posts ($ query_string. '&meta_key=J_listing_type & orderby=meta_value_num'); peronofuncionathanks 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
-
Intente simplemente `orderby=meta_value`Try just `orderby=meta_value`
- 0
- 2014-10-13
- TheDeadMedic
-
Intentoestotambiénperonofunciona :(i try this also but not working :(
- 0
- 2014-10-13
- itcgpit mark
Obtengo una listapro con aleatorio,pero quiero
pro
además degratis,pero con la listapro
primero,luegometa_value
free
gratis.También configuro
orderby
meta_value
Estonofunciona,yen la cadena de consultael valorpredeterminadoes
cat
.Tomaráorderby
date
conmeta value = pro
yfree
.¿Alguna sugerencia?