meta_query con meta valori come array serializzati
11 risposta
- voti
-
- 2015-04-16
Miimbatto anchein questa situazione. Ecco cosa hofatto:
$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ) ) );
Spero che questo aiuto
I also run into this situation. Here what i did:
$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ) ) );
Hope this help
-
Mi èpiaciutamolto questa soluzione.Sfortunatamente,questonon è applicabile quando "$ value" è anche un ID.Intal caso,suggerisco di crearefunzioniper aggiungere un carattere a ciascunelemento dell'arrayprima di salvarei datie un'altrafunzioneper rimuovereil carattereprima di utilizzarei dati.Questo wat,l'indice serializzato "i: 2"non verrà confuso con "i: D2" dei dati "reali".Ilparametro dellameta query dovrebbe quindi diventare `'value'=> sprintf (':" D% s ";',$ value),`e manterrai la correttafunzionalità di questameravigliosa risposta!I really liked this solution. Unfortunately, this is not applicable when the `$value` is also an ID. In that case, i suggest to create to functions to add a character to each array element before saving the data and another function to remove the character before using the data. This wat, the serialized `i:2` index will not be confused with the `i:D2` of the "real" data. The meta query parameter should then become `'value' => sprintf(':"D%s";', $value),` and you will keep the correct functionality of this wonderful answer!
- 1
- 2017-04-13
- Erenor Paz
-
Questa soluzione stafunzionandopermeThis solution is working for me
- 0
- 2018-01-12
- Rakhi
-
Anche questo hafunzionatoperfettamenteperme.Tuttavia,ho avuto unpiccolopanico quando ho visto la soluzione accettataThis also worked perfectly for me. Did have a mini panic when I saw the accepted solution though
- 0
- 2018-02-26
- Shane Jones
-
@Erenor Paz,ho appenapubblicato una soluzione chefunzionabene sia con ID che con stringhe: https://wordpress.stackexchange.com/a/299325/25264@Erenor Paz, I just posted a solution which works well with both ID and Strings: https://wordpress.stackexchange.com/a/299325/25264
- 0
- 2018-03-29
- Pablo S G Pacheco
-
usare "MI PIACE" è unmodofantasticoe veloceper arrestareil server (pernonparlare deifalsipositivi) èmeglio avere un ottimo caching.using `LIKE` is a great and fast way to bring your server down (not to mention false positives) you better have a very good caching.
- 0
- 2018-04-02
- Mark Kaplun
-
Nota che con questa soluzione,corrisponderà a qualsiasi sottovalore con quel valore.Quindi,se cerchi una latitudine di "5",corrisponderà anche alla longitudine di "5".Questo èmeno unproblema con questoparticolare caso d'uso,ma è qualcosa a cuiprestare attenzione.È ancheimpossibile ordinarei risultatie non èpossibileeseguire alcuna logica/matematica come recuperaretuttii valori che sono sopra o sotto unnumeroNote that with this solution, it will match any subvalue with that value. So if you look for a latitude of `5`, it will match longitudes of `5` too. This is less of an issue with this particular use case, but it's something to watch out for. It's also impossible to sort the results, and it's not possible to perform any logic/math such as fetch all values that are above or below a number
- 0
- 2020-05-29
- Tom J Nowell
-
- 2012-08-20
Perderai davvero la capacità diinterrogarei tuoi datiin modoefficiente quando serializzi le vocinel database WP.
Il risparmioe ilguadagnoin termini diprestazioni complessivi chepensi di ottenere con la serializzazionenon sarannoevidentiin misura significativa. Potresti ottenere una dimensione del database leggermenteinferiore,mail costo delletransazioni SQL saràpesante seinterroghi quei campie provi a confrontarliin modo utilee significativo.
Salvainvece la serializzazioneperi dati chenonintendiinterrogarein quellanatura,ma cheinvece accederai soloin modopassivotramite la chiamata diretta dell'API WP
get_post_meta()
- da quellafunzionepuò decomprimere una voce serializzataper accedere anche alle sueproprietà dell'array.Infatti ha assegnatoil valore di true comein;
$meta = get_post_meta( $post->ID, 'key', true );
Restituirài dati come un array,accessibileper l'iterazionenormalmente.
Puoi concentrarti su altre ottimizzazioni di database/siti come lamemorizzazionenella cache,laminificazione CSSe JSe l'utilizzo ditali servizi come CDN,senecessario. Per citarne solo alcuni ... WordPress Codex è unbuonpunto dipartenzaper scoprire dipiù su questo argomento: QUI
You really are going to lose the ability to query your data in any efficient manner when serializing entries into the WP database.
The overall performance saving and gain you think you are achieving by serialization is not going to be noticeable to any major extent. You might obtain a slightly smaller database size but the cost of SQL transactions is going to be heavy if you ever query those fields and try to compare them in any useful, meaningful manner.
Instead, save serialization for data that you do not intend to query in that nature, but instead would only access in a passive fashion by the direct WP API call
get_post_meta()
- from that function you can unpack a serialized entry to access its array properties too.In fact assigned the value of true as in;
$meta = get_post_meta( $post->ID, 'key', true );
Will return the data as an array, accessible for you to iterate over as per normal.
You can focus on other database/site optimizations such as caching, CSS and JS minification and using such services as a CDN if you require. To name but a few.... WordPress Codex is a good starting point to uncover more on that topic: HERE
-
- 2013-08-22
Ho appenagestitoi campi serializzatie potreiinterrogarli. Non utilizzando lameta_queryma utilizzando una query SQL.
global $wpdb; $search = serialize('latitude').serialize(50); $query = $wpdb->prepare("SELECT `post_id` FROM `wp_postmeta` WHERE `post_id` IN (SELECT `ID` FROM `wp_posts` WHERE `post_type` = 'my-post-type') AND `meta_key` = '_coordinates' AND `meta_value` LIKE '%s'",'%'.$search.'%'); $ids = $wpdb->get_col($query); $args = array( 'post__in' => $ids 'post_type' => 'team' //add the type because the default will be 'post' ); $posts = get_posts($args);
La query cercaprimailpost conilpost_type corrispondente,quindi la quantità di record wp_postmeta saràinferiore dafiltrare. Quindi ho aggiunto un'istruzione whereper ridurre ulteriormente le righefiltrando su
meta_key
Gli IDfinisconobene in un array comenecessarioperget_posts.
PS.MySQL v5.6 o superiore ènecessarioper unabuonaprestazione delle sottoquery
I've just dealed with serialized fields and could query them. Not using the meta_query but using a SQL query.
global $wpdb; $search = serialize('latitude').serialize(50); $query = $wpdb->prepare("SELECT `post_id` FROM `wp_postmeta` WHERE `post_id` IN (SELECT `ID` FROM `wp_posts` WHERE `post_type` = 'my-post-type') AND `meta_key` = '_coordinates' AND `meta_value` LIKE '%s'",'%'.$search.'%'); $ids = $wpdb->get_col($query); $args = array( 'post__in' => $ids 'post_type' => 'team' //add the type because the default will be 'post' ); $posts = get_posts($args);
The query first searches for post with the matching post_type so the amount of wp_postmeta records will be less to filter. Then i've added a where statement to reduce the rows further by filtering on
meta_key
The IDs end up nicely in an array as needed for get_posts.
PS. MySQL v5.6 or higher is needed for good subquery performance
-
- 2018-03-29
Penso che ci siano 2 soluzioni chepossonoprovare a risolvereilproblema dei risultati archiviati sia come stringa che comenumeriinteri. Tuttavia,èimportante dire,come altri hanno sottolineato,chenon èpossibilegarantire l'integrità dei risultati archiviati come Integer,perchépoiché questi valori vengonomemorizzati come array serializzati,l'indiceei valori vengonomemorizzatiesattamente con lo stessomodello. Esempio:
array(37,87);
èmemorizzato come un array serializzato,in questomodo
a:2:{i:0;i:37;i:1;i:87;}
Nota
i:0
comeprimaposizione dell'arrayei:37
comeprimo valore. Lo schema è lo stesso. Ma andiamo alle soluzioni
1) Soluzione REGEXP
Questa soluzionefunzionaperme indipendentemente dalmeta valore salvato come stringa onumero/id. Tuttavia utilizza
REGEXP
,chenon è così veloce come usareLIKE
$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => '\;i\:' . $value . '\;|\"' . $value . '\";', 'compare' => 'REGEXP' ) ) );
2) Soluzione MI PIACE
Non sono sicuro della differenza diprestazioni,ma questa è una soluzione che utilizza
LIKE
e funziona anchepernumerie stringhe$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'latitude', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ), array( 'key' => 'latitude', 'value' => sprintf(';i:%d;', $value), 'compare' => 'LIKE' ) ) );
I think there are 2 solutions that can try to solve the problem of results being stored as both String and Integers. However, it's important to say, as others pointed out, that it is not possible to guarantee the integrity of results stored as Integer, because as these values as stored as serialized arrays, the index and the values are stored exactly with the same pattern. Example:
array(37,87);
is stored as a serialized array, like this
a:2:{i:0;i:37;i:1;i:87;}
Note the
i:0
as the first position of the array andi:37
as the first value. The pattern is the same. But let's go to the solutions
1) REGEXP Solution
This solution works for me regardless of the meta value being saved as string or number / id. However it uses
REGEXP
, which is not so fast as usingLIKE
$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => '\;i\:' . $value . '\;|\"' . $value . '\";', 'compare' => 'REGEXP' ) ) );
2) LIKE Solution
I'm not sure about the performance difference but this is a solution that uses
LIKE
and also works for both number and strings$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'latitude', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ), array( 'key' => 'latitude', 'value' => sprintf(';i:%d;', $value), 'compare' => 'LIKE' ) ) );
-
"REGEXP" è utilein certe situazioni,ma sepuoi usare "LIKE",penso che siailmetodopreferibile.Un vecchio link,ma comunque abbastanza utile,secondome: https://thingsilearn.wordpress.com/2008/02/28/mysql-query-speed-regexp-vs-like/:-)`REGEXP` is nice in certain situations, but if you can use `LIKE`, I think it's the preferable method. An old link, but still quite useful, in my opinion: https://thingsilearn.wordpress.com/2008/02/28/mysql-query-speed-regexp-vs-like/ :-)
- 0
- 2018-03-30
- Erenor Paz
-
@ErenorPaz Hai ragione."MI PIACE" èpiù veloce.Ma questa è una soluzione chefunziona siaper le stringhe cheperi numeri@ErenorPaz You are right. `LIKE` is faster. But this is a solution that works for both strings and numbers
- 0
- 2018-03-30
- Pablo S G Pacheco
-
Si..quindi la risposta è (come sempre): a seconda della situazione,sepuoi usare "MI PIACE";èpreferibile,altrimenti anche REGEXP andràbene :-)Yes..so, the answer is (as always): depending on the situation, if you can use "LIKE"; it's preferable, otherwise REGEXP will do as well :-)
- 0
- 2018-03-31
- Erenor Paz
-
@ErenorPaz,homodificato lamia risposta aggiungendo unanuova soluzione che utilizza "MI PIACE"mafunziona siaperi numeri cheper le stringhe.Non sono sicuro delleprestazioniperché deve confrontarei risultati utilizzando "OR"@ErenorPaz, I edited my answer adding a new solution that uses `LIKE` but works for both numbers and strings. I'm not sure about the performance because it has to compare the results using `OR`
- 0
- 2018-04-01
- Pablo S G Pacheco
-
Esattamente !!!quale hobisogno di ottenere lo stesso risultato come questo .... Grazie uomo!!!Exactly !!! which i need to get result same like this.... Thanks Man!!!
- 0
- 2018-09-27
- kuldip Makadiya
-
- 2012-12-12
Questoesempiomi ha davvero aiutato. È specificoperilplug-in S2Members (che serializzai metadati dell'utente). Mati consente diinterrogare unaparte di un array serializzato all'interno dimeta_key.
Funziona utilizzando lafunzione MySQL REGEXP.
Ecco lafonte
Eccoil codice cheinterrogatuttigli utenti che vivononegli Stati Uniti. L'hofacilmentemodificatoperinterrogare uno deimiei campi di registrazionepersonalizzatie l'hofattofunzionarein pochissimotempo.
<?php global $wpdb; $users = $wpdb->get_results ("SELECT `user_id` as `ID` FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "s2member_custom_fields' AND `meta_value` REGEXP '.*\"country_code\";s:[0-9]+:\"US\".*'"); if (is_array ($users) && count ($users) > 0) { foreach ($users as $user) { $user = /* Get full User object now. */ new WP_User ($user->ID); print_r($user); /* Get a full list of properties when/if debugging. */ } } ?>
This example really helped me. It's specifically for S2Members plugin (which serializes user metadata). But it allows you to query a portion of a serialized array within the meta_key.
It works by using the MySQL REGEXP function.
Here is the source
Here is the code that queries all users living in the US. I easily modified it to query one of my custom registration fields and had it working in no time.
<?php global $wpdb; $users = $wpdb->get_results ("SELECT `user_id` as `ID` FROM `" . $wpdb->usermeta . "` WHERE `meta_key` = '" . $wpdb->prefix . "s2member_custom_fields' AND `meta_value` REGEXP '.*\"country_code\";s:[0-9]+:\"US\".*'"); if (is_array ($users) && count ($users) > 0) { foreach ($users as $user) { $user = /* Get full User object now. */ new WP_User ($user->ID); print_r($user); /* Get a full list of properties when/if debugging. */ } } ?>
-
- 2015-01-22
Dopo aver letto una serie di suggerimentipereseguire unfiltro
WP_Query
per array serializzati,ecco come l'hofattofinalmente: creando un array di valori separati da virgola usandoimplodeinsieme a un$ wpdb
query SQLpersonalizzata che utilizzaFIND_IN_SET
per cercareil valore richiestonell'elenco separato da virgole.(è simile alla risposta di Tomas,ma è unpo 'menoimpegnativain termini diprestazioniper la query SQL)
1. Infunctions.php:
Neltuofilefunctions.php (o ovunqueimpostiil metabox)nellafunzione
yourname_save_post ()
usaupdate_post_meta ($post- > ID,'checkboxArray',implode (",",$ checkboxArray));//aggiungendo l'implosione
per creare l'array contenente valori separati da virgole.
Dovrai anche cambiare latua variabile di outputnellafunzione di costruzione delmetabox
yourname_post_meta ()
adminin$ checkboxArray=explode (",",get_post_custom ($post- > ID) ["checkboxArray"] [0]);//aggiungendo l'esplosione
2. Nelfile PHPmodello:
Test: seesegui un
get_post_meta ($id);
dovresti vederecheckboxArray
come un array contenentei tuoi valori separati da virgoleinvece di un array serializzato.Ora creiamo lanostra query SQLpersonalizzata utilizzando
$wpdb
.global $ wpdb; $ ricerca=$post- > ID; $ query="SELEZIONA * DA wp_posts WHERE FIND_IN_SET ($ ricerca,( SELEZIONA wp_postmeta.meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key='blogLocations' AND wp_postmeta.post_id=wp_posts.ID) ) AND (wp_posts.post_type='post') AND (wp_posts.post_status='publish'); "; $posts=$ wpdb- >get_results ($ query); foreach ($posts as $post) { //il contenuto deltuopost qui }
Notail
FIND_IN_SET
,è lì che avviene lamagia.Ora ...poiché sto usando
SELECT *
,questo restituisce tuttii dati delpost e all'interno diforeach
puoiecheggiare cosa vuoi da quello (fai unprint_r ($posts);
senon sai cosa èincluso. Nonimposta "il ciclo"perte (preferisco così),mapuòesserefacilmentemodificatoperimpostareil loop sepreferisci (dai un'occhiata asetup_postdata ($post);
nel codice,probabilmente dovrai cambiareSELECT *
per selezionare sologli IDposte$ wpdb- >get_results
periltipo$ wpdb
corretto - vediil codiceper$ wpdb
ancheperinformazioni su quell'argomento ).Whelp,ci è voluto unpo 'diimpegno,mapoiché
wp_query
non supporta l'esecuzione di' compare '=> "IN"
con valori serializzati o separati da virgole questo shim è l'opzionemigliore!Spero che questo aiuti qualcuno.
After reading a bunch of tips for running a
WP_Query
filtering by serialized arrays, here's how I finally did it: by creating an array of comma separated values using implode in conjunction with a$wpdb
custom SQL query utilizingFIND_IN_SET
to search the comma separated list for the requested value.(this is similar to Tomas's answer, but its a bit less performance intensive for the SQL query)
1. In functions.php:
In your functions.php file (or wherever you're setting up the meta box) in the
yourname_save_post()
function useupdate_post_meta($post->ID, 'checkboxArray', implode(",", $checkboxArray)); //adding the implode
to create the array containing comma separated values.
You'll also want to change your output variable in the
yourname_post_meta()
admin meta box construction function to$checkboxArray = explode(",", get_post_custom($post->ID)["checkboxArray"][0]); //adding the explode
2. In the template PHP file:
Test: if you run a
get_post_meta( $id );
you should seecheckboxArray
as an array containing your comma separated values instead of a serialized array.Now, we build our custom SQL query using
$wpdb
.global $wpdb; $search = $post->ID; $query = "SELECT * FROM wp_posts WHERE FIND_IN_SET( $search, ( SELECT wp_postmeta.meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'blogLocations' AND wp_postmeta.post_id = wp_posts.ID ) ) AND ( wp_posts.post_type = 'post' ) AND ( wp_posts.post_status = 'publish' );"; $posts = $wpdb->get_results($query); foreach ($posts as $post) { //your post content here }
Notice the
FIND_IN_SET
, that's where the magic happens.Now... since I'm using
SELECT *
this returns all the post data and within theforeach
you can echo out what you want from that (do aprint_r($posts);
if you don't know what's included. It doesn't set up "the loop" for you (I prefer it this way), but it can easily be modified to set up the loop if you prefer (take a look atsetup_postdata($post);
in the codex, you'll probably need to changeSELECT *
to select only post ID's and$wpdb->get_results
to the correct$wpdb
type -- see the codex for$wpdb
also for information on that subject).Whelp, it took a bit of effort, but since
wp_query
doesn't support doing'compare' => 'IN'
serialized or comma separated values this shim is your best option!Hope this helps someone.
-
- 2015-07-03
Se utilizzi l'operatore di confronto
like
nellatuameta query,dovrebbefunzionarebene cercare all'interno di un array serializzato.$wp_user_search = new WP_User_Query(array( 'meta_query' => array( array( 'key' => 'wp_capabilities', 'value' => 'subscriber', 'compare' => 'not like' ) ) ) );
sitraducein:
[query_where] => WHERE 1=1 AND ( ( wp_usermeta.meta_key = 'wp_capabilities' AND CAST(wp_usermeta.meta_value AS CHAR) NOT LIKE '%subscriber%' )
If you use the
like
comparison operator in your meta query, it should work fine to look inside a serialized array.$wp_user_search = new WP_User_Query(array( 'meta_query' => array( array( 'key' => 'wp_capabilities', 'value' => 'subscriber', 'compare' => 'not like' ) ) ) );
results in:
[query_where] => WHERE 1=1 AND ( ( wp_usermeta.meta_key = 'wp_capabilities' AND CAST(wp_usermeta.meta_value AS CHAR) NOT LIKE '%subscriber%' )
-
- 2016-07-07
Sei mieimetadati sono ditipo array,utilizzo questometodopereseguire querypermeta:
$args = array( 'post_type' => 'fotobank', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'collections', 'value' => ':"'.$post->ID.'";', 'compare' => 'LIKE' ) ) ); $fotos = new WP_Query($args);
If my meta data is array type, i'm use this method for query by meta:
$args = array( 'post_type' => 'fotobank', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'collections', 'value' => ':"'.$post->ID.'";', 'compare' => 'LIKE' ) ) ); $fotos = new WP_Query($args);
-
Ciòpotrebbeportare a risultatiindesiderati quando l'ID di unpost ha lo stesso valore dell'ID della stringa serializzataThis could lead to unwanted results when a post ID has the same value as the id of the serialized string
- 0
- 2017-04-13
- Erenor Paz
-
- 2017-07-06
Mi sonoincuriosito le risposteprecedenti,dove
meta_query
ha cometarget la chiavelatitude
invece di_coordinates
. Dovevo andare atestare sefosse davveropossibilenellemeta queryindirizzare una chiave specifica all'interno di un array serializzato. :)Ovviamentenonera così.
Quindi,tieni presente che la chiave correttaperiltargeting è
_coordinates
invece dilatitude
."$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => '_coordinates', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ) ) );
<"NOTE :"
-
Questo approccio rendepossibile scegliere cometarget solo corrispondenzeesatte. Quindi cose come tutte le latitudinimaggiori di 50 non sonopossibili.
-
Perincludere corrispondenze di sottostringa,sipotrebbe utilizzare
'value' => sprintf(':"%%%s%%";', $value),
. (nontestato)
I got curious about the answers above, where the
meta_query
targeted the keylatitude
instead of_coordinates
. Had to go and test if it really was possible in meta queries to target a specific key inside a serialized array. :)That obviously wasn't the case.
So, note that the correct key to target is
_coordinates
instead oflatitude
.$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => '_coordinates', 'value' => sprintf(':"%s";', $value), 'compare' => 'LIKE' ) ) );
NOTES:
This approach makes it only possible to target exact matches. So things like all latitudes greater than 50 are not possible.
To include substring matches, one could use
'value' => sprintf(':"%%%s%%";', $value),
. (haven't tested)
-
- 2011-05-12
Ho la stessa domanda.Forse haibisogno delparametro "tipo"?Dai un'occhiata a questa domanda correlata: Query campopersonalizzato:ilmetávalore è un array
Forseprovare:
$ args=array ( 'post_type'=> 'my-post-type', 'meta_query'=> array ( Vettore( 'key'=> 'latitudine', 'value'=> '50', 'compare'=> '>', 'type'=> 'numerico' ) ) );
I have the same question. Maybe you need the 'type' parameter? Check out this related question: Custom Field Query - Meta Value is Array
Perhaps try:
$args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => '50', 'compare' => '>', 'type' => 'numeric' ) ) );
-
Grazieperil suggerimento,manon èproprio quello che sto cercando.Ilproblema è cheil valore che sto cercando ditrovarefaparte di un array serializzatonel database.Thanks for the suggestion, but this isn't quite what I'm after. The problem is that the value I'm trying to match is a part of an array that is serialized within the database.
- 0
- 2011-05-13
- tollmanz
-
Sì,hai ragione.Hoprovato questamattinae non hafunzionatoneancheperme. Ho lo stessoproblema.Memorizzazione di un valore di unameta chiave comematrice.Stoiniziando apensare che questononpossaesserefattoe potreiinvece doverlimemorizzare comemetacampi separati con lo stessonome ...e gestire correttamente la loro cancellazione/aggiornamento.Yea, you're right. I tried this this morning and it didn't work for me either. I have the same issue. Storing a value of a meta key as an array. I'm starting to think this can't be done and I might instead have to store them as separate meta fields with the same name...and just manage the deleting/updating of them properly.
- 0
- 2011-05-13
- user4356
-
@ user4356 ... èesattamente quello chefarò.Speravo di ridurreilnumero di righe che avreiinseritoper ognipost,maimmagino chenon siapossibile.@user4356...that's exactly what I'm going to do. I was hoping to cut down on the number of rows that I would insert for each post, but I guess that's not possible.
- 0
- 2011-05-14
- tollmanz
-
- 2011-05-12
Mi sonoimbattutoin qualcosa di simile durante l'utilizzo delplugin Magic Fields.Questopotrebbefareiltrucco
$values_serialized = serialize(array('50')); $args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => $values_serialized, 'compare' => '>' ) ) );
I ran into something similar while using the Magic Fields plugin. This might do the trick
$values_serialized = serialize(array('50')); $args = array( 'post_type' => 'my-post-type', 'meta_query' => array( array( 'key' => 'latitude', 'value' => $values_serialized, 'compare' => '>' ) ) );
-
Grazieperil suggerimento!Penso che questo siailpiù vicinopossibile,main realtànonfunzioneràperchéil confronto di un array serializzato con un altro array serializzatonon ha senso ameno chenon stia cercando una corrispondenzaesatta.Thanks for the suggestion! I think this is as close as one can get, but it won't actually work because comparing a serialized array to another serialized array doesn't made sense unless I was looking for an exact match.
- 1
- 2011-05-13
- tollmanz
-
Quindi questonon dovrebbeessere contrassegnato come la risposta correttaed èirresponsabile dapartetuafarlo.La risposta corretta quindi sarebbe "No,non èpossibile"Then this shouldn't be marked as the correct answer and it is irresponsible of you to do so. The correct answer thus would be 'No, it's not possible'
- 5
- 2012-08-20
- Tom J Nowell
-
D'accordo,anche WPgestisce la serializzazioneperte,`serialize ()`non è richiestoin questo caso ...Agree, also WP handles serialization for you, `serialize()` is not required in this instance...
- 1
- 2012-08-20
- Adam
-
In realtà la risposta di @ seth-stevenson è ottima quando sifaesattamente quello che ha detto,usandoilplugin "Magic Fields".Poiché quelplug-in serializza determinatitipi di datiperimpostazionepredefinita,questo èilmodomigliorepereseguire una corrispondenza ESATTA.Actually @seth-stevenson answer is great when doing exactly what he said, using "Magic Fields" plugin. As that plugin serializes certain data type by default, this is the best way to do an EXACT match.
- 2
- 2013-01-09
- zmonteca
-
@TomJNowell Fatto!Mi ci sono voluti solo 5mesi;)@TomJNowell Done! Just took me 5 months ;)
- 0
- 2013-01-17
- tollmanz
Sto lavorando a unprogettoin cui sto creando untipo dipostpersonalizzatoe datipersonalizzatiinserititramitemetabox associati almiotipo dipostpersonalizzato. Per qualsiasimotivo ho deciso di codificarei metaboxin modotale chegliinputin ognimetaboxfaccianoparte di un array. Adesempio,stomemorizzando longitudinee latitudine:
Per qualsiasimotivo,mi piaceva l'idea di avere una singola vocepostmetaper ognimetabox. Sull'hook
save_post
,salvoi datiin questomodo:L'hofattoperché hotremetaboxe mipiace avere solo 3 valoripostmetaper ognipost;tuttavia,ora ho realizzato unpotenzialeproblema con questo. Potrei voler usare WP_Queryperestrarre solo determinatipostin base a questimeta valori. Adesempio,potrei voler otteneretuttii post con valori di latitudine superiori a 50. Se avessi questi datinel databaseindividualmente,magari utilizzando la chiave
latitude
,farei qualcosa deltipo:Dato che ho la latitudine comeparte del
_coordinates
postmeta,questononfunzionerebbe.Quindi,lamia domanda è: c'è unmodoper utilizzare
meta_query
perinterrogare un array serializzato come quello che hoin questo scenario?