Ordina per meta valore, prima pro, poi gratis
-
-
Benvenutoin WPSE.Periniziare,nonesitare a visitare lanostrapagina [tour]per avere un'idea di comefunzionail sito.Visita anche [aiuto]pereventuali domande relative al sito.Pertornare allatua domanda,ho solobisogno di cancellare alcuniproblemi,vuoi recuperarein modo casualei post da una chiavemeta con valorimetagratuitie professionali.Supponiamo chetu riceva 10post,4proe 6gratuiti,i 4postpro devonoesseremostratiprima,poigli altri 6gratuiti.Solo un suggerimento,non usare `query_posts`,piuttosto usa` 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
-
kgrazie significa che ho usato query_postsnellafunzioneincorporata di.tax-list.php quindi devo creare unnuovofile cat.php?perilnuovo ciclo?o usato wpnello stessofile?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
-
Usa lo stessofile,cambia semplicemente `query_posts`in` WP_Query`.Inoltre,perfavore consigli sulmio ultimo commento se questo è ciò che stai cercando difareUse 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
-
ya stoprovando come. nellapagina dell'elenco delle categorie tipo dipost=elenco meta value=proe freemaprima visualizzapropoifree .so ordinapermeta value order DESC WP_Query ($ query_string. '& Orderby=meta_value_num'); Chiamata a unafunzionenon definita WP_Query () erroreya 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
-
peresempionellamiapagina di categoria se ci sono 10post,voglio 10 con casualemameta value=primapropoimeta_value=freepoi.ok . in questomomento lavoro casuale. contutto o solopost o sologratuito.ma voglio che l'ordinepermeta valore sia cosìfacileperme risolvere questoproblemafor 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
-
Visitare [`WP_Query`] (http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters)per capire comefunzionanoi parametri dellameta querye come dovrebberoessere costruiti.Inoltre,controllai parametri 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 risposta
- voti
-
- 2014-10-13
Prima di sparare,solo unanota, MAI (enfasimia)fare uso di
query_posts
per creare querypersonalizzateNota: questafunzionenon èpensataperessere utilizzata daplugin otemi. Come spiegatoin seguito,ci sono opzionimigliorie piùperformantipermodificare la queryprincipale. query_posts () è unmodoeccessivamente semplicisticoe problematicopermodificare la queryprincipale di unapagina sostituendola con unanuovaistanza della query. Èinefficiente (eseguenuovamente le query SQL)e in alcune circostanzenonfunzionerà (soprattutto spesso quando sitratta diimpaginazione deipost).
Utilizzapiuttosto
WP_Query
oget_posts
per creare querypersonalizzate,ma SOLO setunon èpossibilemodificare la queryprincipale conpre_get_posts
. Per ulterioriinformazioni,consulta questopostSupponendo che ci siano solo due valoriper latua
meta_key
( NOTA: a scopo ditest,ho usato lamiameta chiave,dovresti sostituirla con latua ),ovveropro
efree
,puoi semplicemente recuperarei post che hanno questo specificometa_key
. Latua query sarà quindi simile a questa:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
Setuttavia si dispone dipiù valori oltre a questi due,sarànecessariomodificare la queryperincludereil
meta_value
e quindi utilizzareilparametrometa_compare
. Latua querymodificata diventerà quindi:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
( PS! Prima di continuare,dovrestinotare cheilparametro
orderby
è cambiatonella versione 4.0,main questo casononfunzionerà.Ottimo,ora avrai 5post che sono stati recuperati casualmente che hanno un
meta_value
dipro
ofree
Ora dobbiamo ordinarli. Lamigliore soluzionepossibile è utilizzare
usort
per ordinare l'array dipost restituitoin$the_query->posts
in base al valore deipostmeta_value
. Dovrai quindi annullare l'impostazione di$the_query->posts
e quindi ripristinarlo con l'array dipost riordinato.Eccoil codice 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(); ?>
Dovrai solo regolare le variabili della queryin base alletueesigenzee anche regolareil cicloper visualizzare ciò che ènecessario
Questonon è l'unicomodoper ottenerlo,tuttavia,puoi anche spostare latuafunzione di ordinamentoneltuofunctions.phpe indirizzare specificamente questa querypersonalizzata
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
-
si sono diventatiproprimae grazie casuali.ma orail suo risultato di visualizzazione cometuttii post ..ma voglio soloper la categoriaperticuler.come se clicco sulla categoriae vogliopost solo di quella categoria,grazie ancheilmiotipo dipost=elencoye 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
-
Aggiungi semplicemente `'cat'=>get_queried_object ('cat') -> cat_ID,` aituoi argomentiJust add `'cat' => get_queried_object('cat')->cat_ID,` to your arguments
- 0
- 2014-10-15
- Pieter Goosen
-
grazie ho ottenuto un outputperfettonel database.quandopasso l'output sql.ora ho solobisogno di cambiarein html significaecoparte.slmmain questomomento èpro dopogratuitoma voglio cheil valore sia casuale.?.grazie ho anchebisogno dimodifichein html o cosa voglio visualizzarenellapaginagraziethanks 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
-
Sono contento che sia risolto.Per quanto riguarda la sezione HTML,ciòesula dallo scopo di questa domanda.Anche le cose relative all'HTML sonofuoritema su questo sito.Se haibisogno di aiuto con la struttura html dellatuapagina,dovrestiporre unanuova domanda su stackoverflow.com che èpiù adatta a questotipo di domande.GrazieGlad 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
-
graziemillemi hai salvato lagiornata.hoi dati corretti ora ho solobisogno dieco.untitolo dell'immaginee des.con come datemaformiato.okgrazie signore :)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
-
non ci vorràpostperpagina .. questointerromperà l'impaginazionein ... !!it will not take post per page.. this will break pagination in ...!!
- 0
- 2014-10-15
- itcgpit mark
-
- 2014-10-13
Ènecessarioeseguire una querytramite
meta_key
anzichémeta_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'
-
grazieper la rispostamanonfunziona che ho usato query_posts ($ query_string. '&meta_key=J_listing_type & orderby=meta_value_num'); manonfunzionathanks 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
-
Prova solo "orderby=meta_value"Try just `orderby=meta_value`
- 0
- 2014-10-13
- TheDeadMedic
-
provo anche questomanonfunziona :(i try this also but not working :(
- 0
- 2014-10-13
- itcgpit mark
Ottengo l'elencopro con casuale,ma voglioelenco gratuito.
pro
oltre chegratuito,maprima con l'elencopro
,poimeta_value
Ho ancheimpostato
orderby
meta_value
Questononfunzionae nella stringa di querypredefinitaper
cat
.Ci vorràorderby
date
sia conmeta value=pro
che confree
.Qualche suggerimento?