web-dev-qa-db-fra.com

Comment éviter de réinventer la molette Custom Fields dans le Metabox de mon plugin?

Voici le scénario:

Dans mon plugin, je souhaite qu'un métabox apparaisse dans l'éditeur de publication/page.

Je souhaite que la métabox soit, exactement, semblable à la métabox "Champs personnalisés" de WordPress, (Ajouter une autre, supprimer, mettre à jour, liste déroulante renseignée automatiquement, Entrer un nouveau lien, AJAX magique, etc.); avec quelques différences mineures:

  • Au lieu de juste 'Nom' et 'Valeur', je veux 'Cible', 'Nom' et 'Valeur'

  • Au lieu de les enregistrer tous en tant que champs personnalisés "publics" qui apparaissent automatiquement dans la métabox WP Champs personnalisés, je les souhaite tous stockés sous la forme d'un tableau multidimensionnel unique dans un champ "privé", namespaced, ... ie , _myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )

J'ai passé toute la journée à fouiller dans le réseau enchevêtré de WP Core, et je n'ai pas été en mesure de trouver un moyen simple de le résoudre. Si je me base sur mes connaissances actuelles, je finirai par dupliquer des centaines de lignes de code de base à partir de nombreux fichiers php et js.

Est-ce que n'importe qui ici dans WordPress Answers-land peut m'aider à me diriger dans la bonne direction? J'ai beaucoup d'expérience dans l'ajout et l'utilisation de métaboxes au sein de thèmes et de plugins, mais celui-ci me laisse totalement perplexe.

S'il vous plaît parlez si je ne suis pas clair.

Merci d'avance à tous ceux qui répondent!

4
SethMerrick

La réponse courte est qu'il n'y a aucun moyen simple de le faire, car la métabox du champ personnalisé n'a pas été écrite avec pour objectif l'extensibilité.

Vous pouvez ajouter le champ supplémentaire à l'aide de JavaScript et pirater le bouton Ajouter pour envoyer les données à votre gestionnaire personnalisé AJAX qui les stockera à votre guise.

2
scribu

On dirait que nous travaillons sur des choses similaires. Je ne sais pas si cela vous aidera, mais cela peut vous donner d'autres idées.

1er article de blog en trois parties - http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

J'espère que ça aide!

0

Je sauvegarde mes champs personnalisés avec le nom _meta_whatever. En commençant le nom par un trait de soulignement, empêche WordPress d'afficher les champs personnalisés dans la liste déroulante des publications normales.

Pour enregistrer dans un tableau, j'utilise le code HTML comme ceci.

...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta['startDate'])) echo $meta['startDate']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta['startTime'])) echo $meta['startTime']; ?>"/>
...

Pour récupérer les méta-valeurs, c'est mon code que j'utilise

...
$meta = get_post_meta($post->ID,'_events_meta',TRUE);
...

Maintenant, j'ai un tableau d'association $meta où le nom de la clé est indiqué entre crochets dans l'attribut id- de l'élément input-.

Pour enregistrer, j'utilise un code comme celui-ci

...
$new_data = $_POST['_events_meta'];
...
add_post_meta($post_id,'_events_meta',$new_data,TRUE);
...

Donc, il est enregistré comme un enregistrement dans wp_postsmeta

Espérons que cela aide et est clairement exprimé de mon côté?

0
Guru 2.0