WP inserisce la funzione PHP e i campi personalizzati
4 risposta
- voti
-
- 2011-02-04
Se leggi la documentazioneper
wp_insert_post
,restituiscepost ID delpost che hai appena creato.Se lo combini con la seguentefunzione
__update_post_meta
(unafunzionepersonalizzata che ho acquisito da questo sitoe adattato unpo ')/** * Aggiornapostmetaper unpost. Inoltre,elimina o aggiunge automaticamenteil valore afield_name,se specificato * * @accessprotected * @paraminteger L'ID delpost che stiamo aggiornando * @param string Il campo che stiamo aggiornando/aggiungendo/eliminando * @param string [Facoltativo] Il valore da aggiornare/aggiungereperfield_name. Se lasciato vuoto,i dati verrannoeliminati. * @return void */ funzionepubblica __update_post_meta ($post_id,$field_name,$ value='') { if (vuoto ($ valore) O! $ valore) { delete_post_meta ($post_id,$field_name); } elseif (!get_post_meta ($post_id,$field_name)) { add_post_meta ($post_id,$field_name,$ value); } altro { update_post_meta ($post_id,$field_name,$ value); } } Otterrai quanto segue:
$my_post=array ( 'post_title'=> $ _SESSION ['booking-form-title'], 'post_date'=> $ _SESSION ["cal_startdate"], 'post_content'=> "Questo èilmiopost.", 'post_status'=> 'pubblicare', 'post_type'=> 'prenotazione', ); $the_post_id=wp_insert_post ($my_post); __update_post_meta ($the_post_id,'my-custom-field','my_custom_field_value');
If you read the documentation for
wp_insert_post
, it returns the post ID of the post you just created.If you combine that with the following function
__update_post_meta
(a custom function I acquired from this site and adapted a bit)/** * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified * * @access protected * @param integer The post ID for the post we're updating * @param string The field we're updating/adding/deleting * @param string [Optional] The value to update/add for field_name. If left blank, data will be deleted. * @return void */ public function __update_post_meta( $post_id, $field_name, $value = '' ) { if ( empty( $value ) OR ! $value ) { delete_post_meta( $post_id, $field_name ); } elseif ( ! get_post_meta( $post_id, $field_name ) ) { add_post_meta( $post_id, $field_name, $value ); } else { update_post_meta( $post_id, $field_name, $value ); } }
You'll get the following:
$my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $the_post_id = wp_insert_post( $my_post ); __update_post_meta( $the_post_id, 'my-custom-field', 'my_custom_field_value' );
-
Graziemille.Potresti darmi un'idea sull'impianto.IE.qualema di codice va dove.GraziemoltoThanks very much. Could you possibly give me an idea on the implantation. IE. which but of code goes where. Many Thanks
- 0
- 2011-02-04
- Robin I Knight
-
Benfatto.Il secondoblocco di codice sostituisceiltuo,i valori dellafunzione sono la coppia chiave/valore del campopersonalizzato.Metti lafunzione all'inizio dello script oin unfile .php separatoincluso all'inizio dello script.Nicely done. The second code block replaces yours, the function values is the custom field key/value pair. Put the function either at the top of the script, or in a separate .php file included at the top of the script.
- 2
- 2011-02-04
- aendrew
-
Comenota,io uso OOP quindi questa è la ragioneperilmodificatore "public" davanti a "function".Seincludi lafunzione stessa senzametterlain una classe,non ènecessario aggiungere "public"As a note, I do use OOP so that's the reason for the `public` modifier in front of "function". If you're including the function itself without putting it into a class, you don't need to add `public`
- 1
- 2011-02-05
- Zack
-
Ciao Zack,Aendrewe Philip.Tuttofunzionamagnificamente,tuttavia hoprovato ad applicarlo anche a una query senza alcun risultato.Non vedobene perché.Eccoil linkpoiché sapete comefunzionavailnuovopost del campopersonalizzatoiniziale,hopensato chepotreste vedereilmioerrore.http://wordpress.stackexchange.com/questions/8622/wp-insert-post-php-function-dynamically-generated-custom-fieldsHello Zack, Aendrew and Philip. Everything is working beautifully however I tried to apply it to a query as well to no avail. I don't quite see why. Here is the link since you all know how the initial custom field new post worked I thought you might see my error. http://wordpress.stackexchange.com/questions/8622/wp-insert-post-php-function-dynamically-generated-custom-fields
- 0
- 2011-02-05
- Robin I Knight
-
@ Zack - Bella risposta.Matenderei aevitare l'uso ditrattinibassiinizialinei nomi dellefunzioni senon altroperchéi nomi contrattinibassiinizialitendono adessere usati dagli sviluppatori dipiattaforme quando vogliono crearefunzioni _ "riservate" _ o _ (pseudo) "nascoste" _in modo che lepersonevedendo coloro chepotrebberopensare che sianofunzioni dellapiattaforma,opeggiopotrebberoentrarein conflitto con unafuturafunzioneprincipale di WordPress.Solo unpensiero.@Zack - Nice answer. But I would tend to shy away from using leading underscores in function names if only because names with leading underscores tend to be used by platform developers when they want to create _"reserved"_ or _(pseudo) "hidden"_ functions so people seeing those might think they are platform functions, or worse they might conflict with a future WordPress core function. Just a thought.
- 0
- 2011-02-05
- MikeSchinkel
-
@MikeSchinkel: All'inizio hoiniziato a usare "__"per lefunzioniprotette all'interno di una classe,mapoi ho cambiato la struttura delmiopluginin cui lafunzione dovevaesserepubblica.Inoltre l'avrei chiamato semplicemente "update_post_meta",ma sarebbe stato sicuramentein conflitto con lefunzioniprincipali di WordPress.Quindinon sapevo come chiamarlo :(@MikeSchinkel: At first, I originally started using "__" for protected functions within a class, but then changed the structure of my plugin to where the function needed to be public. I also would've named it simply "update_post_meta" but that would've definitely conflicted with WordPress' core functions. So I didn't know what to name it :(
- 0
- 2011-02-05
- Zack
-
@Zack - Forse `zacks_update_post_meta ()`?:) L'altroproblema chenon homenzionato coni trattinibassiiniziali è che qualcun altro ugualmente creativopotrebbe usare la stessa convenzionein unplugine quindientrarein conflitto coniltuo.Aproposito,sapevi che `update_post_meta ()` aggiunge senonesiste?`add_post_meta ()` ènecessario solo quando si desidera aggiungere chiavi duplicate.@Zack - Maybe `zacks_update_post_meta()`? :) The other issue I didn't mention with leading underscores is that someone else equally creative may use the same convention in a plugin and thus conflict with yours. BTW, did you know that `update_post_meta()` adds if it doesn't exist? `add_post_meta()` is only needed when you want to add duplicate keys.
- 0
- 2011-02-05
- MikeSchinkel
-
@ MikeSchinkel: originariamente hotrovato lafunzione altrove su questo sito,mi èpiaciutae l'ho rifattorizzata soloperché sono così.Ho anchepensato che `update_post_meta ()` lo avessegiàfatto,manonpotevoesserne sicuro.Quando hotrovato lafunzione,sono saltato alle conclusioni.@MikeSchinkel: I originally found the function elsewhere on this site, liked it, and refactored it just because I'm like that. I also figured `update_post_meta()` did that already, but couldn't be sure. When I found the function, I jumped to conclusions.
- 0
- 2011-02-05
- Zack
-
@Zack - Ehi,imparare WordPress è un viaggio.Immagino di avere ancora almenoil 50%in più di quel viaggio rimasto,senonmolto dipiù!@Zack - Hey learning WordPress is a journey. I figure I still have at least 50% more of that journey left, if not a lot more!
- 0
- 2011-02-05
- MikeSchinkel
-
Nonposso aggiungere una risposta,in quantonon ho reputazione su wordpress.stackexchange.Ad oggi c'è unnuovometodo,puoi semplicementeinserire un arrayin wp_insert_post come:meta_input=> array (key=> value)I can't add an answer, as I don't have reputation on wordpress.stackexchange. As of today there is a new method, you can simply put in an array into wp_insert_post as: meta_input => array(key=>value)
- 1
- 2016-10-15
- Frederik Witte
-
- 2011-02-05
Puoi semplicemente aggiungere "add_post_meta" dopo "wp_insert_post"
<?php $my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $post_id = wp_insert_post($my_post); add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true); add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true); ?>
You can simple add the 'add_post_meta' after the 'wp_insert_post'
<?php $my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $post_id = wp_insert_post($my_post); add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true); add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true); ?>
-
- 2011-02-04
Utilizzailfiltro
save_post
,quindi chiamaadd_post_meta
nellafunzione difiltro.Use
save_post
filter, then calladd_post_meta
in your filter function.-
Inutile.$post-> IDnon è disponibileper wp_insert_post_data,necessarioper la creazione di campipersonalizzati.Unhelpful. $post->ID is not available to wp_insert_post_data, which is necessary for creating custom fields.
- 0
- 2011-02-04
- aendrew
-
L'azione di @aendrew `save_post` è allafine dellafunzione,ha l'ID delposte l'oggettopassato,la risposta è corretta.@aendrew `save_post` action is at the very end of the function, it has post's ID and object passed to it, answer is sound.
- 0
- 2011-02-05
- Rarst
-
Sono abbastanza sicuro che sia statomodificato,Rarst.Indipendentemente da ciò,ora ha senso.I'm pretty sure this was edited, Rarst. Regardless, it makes sense now.
- 1
- 2011-02-05
- aendrew
-
@aendrew ah,scusa,non l'honotato@aendrew ah, sorry - didn't notice that
- 0
- 2011-02-05
- Rarst
-
- 2011-02-04
Non credo chetupossa usarlo con wp_insert_post () ;.
Ilmotivo è dovuto almodoin cui WPmemorizzai duetipi di dati. Ipost sono archiviatiin un'unicagrandetabellamonolitica con una dozzina di colonne diverse (wp_posts);i campipersonalizzati sonomemorizzatiin unapiù semplicetabella a 4 colonne (wp_postmeta) compostaprincipalmente da unameta chiavee da un valore,associati a unpost.
Di conseguenza,nonpuoi realmentememorizzarei campipersonalizzatifinchénon hai l'ID delpost.
Prova questo:
function myplugin_insert_customs($pid){ $customs = array( 'post_id' => $pid, 'meta_key' => 'Your meta key', 'meta_value' => 'Your meta value', ); add_post_meta($customs); } add_action('save_post', 'myplugin_insert_customs', 99);
Questo articolo sul codice ha aiutato: è unpo 'l'opposto di quello che staifacendo (adesempio,eliminare una riga del database dopo l'eliminazione delpost): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post
I don't think you can use it with wp_insert_post();.
The reason is because of how WP stores the two data types. Posts are stored in one big monolithic table with a dozen different columns (wp_posts); custom fields are stored in a simpler, 4-column table (wp_postmeta) comprised mainly of a meta key and value, associated with a post.
Consequently, you can't really store custom fields until you have the post ID.
Try this:
function myplugin_insert_customs($pid){ $customs = array( 'post_id' => $pid, 'meta_key' => 'Your meta key', 'meta_value' => 'Your meta value', ); add_post_meta($customs); } add_action('save_post', 'myplugin_insert_customs', 99);
This codex post helped -- it's kinda the opposite of what you're doing (i.e., deleting a DB row upon post deletion): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post
-
Intal caso l'unica via d'uscita cheposso vedere è usare una sessione,sarebbe corretto.In that case the only way out I can see is to use a session, would that be correct.
- 0
- 2011-02-04
- Robin I Knight
-
Nah;Immagino cheiltuoplugin stia cercando diinserire campipersonalizzatinello stessomomentoin cui viene salvato unpost,giusto?Penso che quello che devifare sia agganciarti a WP dopo cheilpost è stato salvato,prendereilnuovonumero ID delpost,quindifornirlo a add_post_meta ();per crearei CF.Aggiornerò lamia rispostain un secondo con del codice.Nah; I'm guessing your plugin is trying to insert custom fields at the same time a post is saved, right? I think what you need to do is hook into WP after the post is saved, grab the post's new ID number, then supply that to add_post_meta(); to create the CFs. I'll update my answer in a second with some code.
- 0
- 2011-02-04
- aendrew
-
Grazieper l'aiuto.Aproposito,non è unplugin.L'ho scrittoin modo dapoterlopersonalizzare quantonecessario.(manonprenderloper significare che sonobravo conphp,solopertentativiederrori)Thanks for the help. By the way its not a plugin. I wrote it so we can customise it as much as needed. (but don't take that to mean I'm any good with php, just trial and error)
- 0
- 2011-02-04
- Robin I Knight
-
È untema,quindi?L'unica vera differenza è che lometterestiin functions.php,in quel caso.It's a theme, then? Only real difference is you'd put that in functions.php, in that case.
- 0
- 2011-02-04
- aendrew
Lafunzione WordPress viene utilizzataperinviarei datiin modoprogrammatico.Campi standard dainviareperincludereil contenuto,l'estratto,iltitolo,la datae molti altri.
Ciòper cuinon è disponibile la documentazione è comeinviare a un campopersonalizzato.So che èpossibile con lafunzione
add_post_meta($post_id, $meta_key, $meta_value, $unique);
.Ma comeincluderlonellafunzione
wp_insert_post
standard?