Bestellen Sie nach Metawert, zuerst pro, dann kostenlos
-
-
Willkommenbei WPSE.Besuchen Sie zunächst unsere [Tour] -Seite,um sichein Bild von der Funktionsweise der Website zumachen.Besuchen Sie auch [Hilfe],wenn Sie Fragen zur Website haben.Um auf Ihre Frage zurückzukommen,mussichnureinige Probleme klären. Siemöchtennach dem Zufallsprinzip Beiträge voneinem Meta-Schlüsselmit kostenlosen undprofessionellen Meta-Werten abrufen.Angenommen,Sieerhalten 10 Beiträge,4 Pro und 6 kostenlos. Die 4 Pro-Beiträgemüssen zuerst angezeigt werden,dann die anderen 6 kostenlos.Nurein Tipp,verwenden Sienicht "query_posts",sondern "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 dankebedeutet,dassich query_postsin -eingebaute Funktion der verwendet habe.tax-list.php alsomussicheine neue cat.php Dateierstellen?fürneue Schleife?oder wpin derselben Datei verwendet?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
-
Verwenden Sie dieselbe Datei,ändern Sieeinfach "query_posts"in "WP_Query".Bittegeben Sie auchbei meinem letzten Kommentar an,ob Sie dies versuchenUse 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
-
yaich versuche wie. auf der Seite der Kategorieliste Beitragstyp=Auflistung meta value=pro undfree,aber zuerstpro,dannfree .so orderbymeta value order DESC WP_Query ($ query_string. '& Orderby=meta_value_num'); Aufruf der undefinierten Funktion 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
-
Zum Beispielin meiner Kategorieseite,wennes 10 Beiträgegibt,dannmöchteich 10mit zufälligem aber Meta-Wert=Pro zuerst,dann Meta-Wert=dannfrei.in Ordnung . im Moment zufällig arbeiten .mit allen odernurposten odernur kostenlos.Aberichmöchte,dass die Reihenfolgenach Metawertfürmich soeinfachist,dieses Problem zu lösenfor 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
-
Bittebesuchen Sie [`WP_Query`] (http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters),um zu verstehen,wie die Meta-Abfrageparameterfunktionieren und wie sie aufgebaut sein sollten.Überprüfen Sie auch die orderby-ParameterPlease 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 Antworten
- Stimmen
-
- 2014-10-13
Bevorich abfeuere,benutzenureine Notiz, NIE (meine Betonung)
query_posts
zum Erstellenbenutzerdefinierter AbfragenHinweis: Diese Funktionistnichtfür Plugins oder Themes vorgesehen. Wie spätererläutert,gibt esbessere und leistungsfähigere Optionen zum Ändern der Hauptabfrage. query_posts ()isteine zu vereinfachte undproblematische Methode,um die Hauptabfrageeiner Seite zu ändern,indem sie durcheine neue Instanz der Abfrageersetzt wird. Esistineffizient (führt SQL-Abfragenerneut aus) und schlägt unterbestimmten Umständen sofortfehl (insbesondere häufigbei der Paginierung von Posts).
Verwenden Sie lieber
WP_Query
oderget_posts
,umbenutzerdefinierte Abfragen zuerstellen,aber NUR ,wenn Sie Die Hauptabfrage kannnichtmitpre_get_posts
geändert werden. Weitere Informationenfinden Sie unter diesem BeitragAngenommen,esgibt nur zwei Wertefür Ihren
meta_key
( BITTE BEACHTEN SIE: Zu Testzwecken habeichmeinen eigenen Meta-Schlüssel verwendet,sollten Sie diesen durch Ihreneigenen ersetzen ),nämlichpro
undfree
,können Sieeinfach Beiträge abrufen,die diesen spezifischenmeta_key
haben. Ihre Anfrage sieht dann ungefähr so aus:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
Wenn Siejedochmehr Werte alsnur diesebeiden haben,müssen Sie Ihre Abfrage so anpassen,dass sie den
meta_value
enthält,und dann den Parametermeta_compare
verwenden. Ihre angepasste Abfrage lautet dann:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
( PS! Bevorichfortfahre,sollten Siebeachten,dass sich der Parameter
orderby
in Version 4.0geändert hat,diesfunktioniertjedochin diesem Fallnicht.Großartig,Sie habenjetzt 5 Posts,die zufällig abgerufen wurden undentwedereinen
habenmeta_value
vonpro
oderfree
Jetztmüssen wir sie sortieren. Diebestmögliche Lösungbesteht darin,
usort
um das zurückgegebene Array von Postsin$the_query->posts
nach dem Wert der Postsmeta_value
zu sortieren. Siemüssen dann$the_query->posts
deaktivieren und dannmit demneugeordneten Post-Array zurücksetzen.Hierist der vollständige 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(); ?>
Siemüssennur die Abfragevariablen an Ihre Bedürfnisse anpassen und die Schleife anpassen,um anzuzeigen,wasbenötigt wird
Diesistjedochnicht dieeinzige Möglichkeit,dies zuerreichen. Sie können Ihre Sortierfunktion auchin Ihrefunctions.php verschieben und speziell auf diesebenutzerdefinierte Abfrage abzielen
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
-
yeich habe zuerst Profi sowie zufälligen Dank.aberjetztist seine Anzeige Ergebnis wie alle Post .. aberichmöchtenurfür Perticuler Kategorie.Als obich auf Kategorie klicke undichmöchtenureinen Beitrag dieser Kategorie schreiben,danke auchmein Beitragstyp=Auflistungye 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
-
Fügen Sieeinfach "cat"=>get_queried_object ("cat") -> cat_ID zu Ihren Argumenten hinzuJust add `'cat' => get_queried_object('cat')->cat_ID,` to your arguments
- 0
- 2014-10-15
- Pieter Goosen
-
dankeich habeperfekte Ausgabein der Datenbank.wennich Ausgabe SQL übergebe.Jetztmussichnurnochin HTML ändernbedeutet Echo Teil.asl aberim Momentistespronach kostenlos,aberichmöchte diesen Wert als zufällig.?. danke Ichmuss auch Änderungenin HTML oder wasich auf der Seite anzeigenmöchte,dankethanks 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
-
Ichbin froh,dass dasgelöstist.Der HTML-Abschnittfälltnichtin den Geltungsbereich dieser Frage.HTML-bezogene Inhalte sind auf dieser Websiteebenfallsnicht zum Thema.Wenn Sie Hilfebei der HTML-Struktur Ihrer Seitebenötigen,sollten Sie unter stackoverflow.comeine neue Frage stellen,diefür diese Art von Fragenbessergeeignet ist.Vielen DankGlad 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
-
Vielen Dank,du hastmeinen Taggerettet.Ich habe die richtigen Datenjetztnurnochim Echo.ein Bildtitel und des.mitgemäß Themenformat.ok danke sir :)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
-
Es wird kein Beitragpro Seitebenötigt. Dies wird die Paginierungin ... !!it will not take post per page.. this will break pagination in ...!!
- 0
- 2014-10-15
- itcgpit mark
-
- 2014-10-13
Siemüssennach dem
meta_key
anstelle desmeta_value
abfragen:$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'
-
Dankefür die Antwort,aberesfunktioniertnicht query_posts ($ query_string. '&meta_key=J_listing_type & orderby=meta_value_num'); abernichtfunktioniertthanks 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
-
Versuchen Sieeinfach "orderby=meta_value"Try just `orderby=meta_value`
- 0
- 2014-10-13
- TheDeadMedic
-
ich versuche das auch aberfunktioniertnicht :(i try this also but not working :(
- 0
- 2014-10-13
- itcgpit mark
Ichbekommeeine Pro-Listemit Zufall,aberichmöchte
pro
sowie kostenlos,aber zuerstmit derpro
-Liste und dannmit demmeta_value
free
Liste.Ich habe auch
festgelegtorderby
meta_value
Diesfunktioniertnicht undistin der Abfragezeichenfolge standardmäßigfür
cat
.Es dauertorderby
date
mit sowohlmeta value = pro
als auchfree
.Irgendwelche Vorschläge?