web-dev-qa-db-fra.com

Metabox avec plusieurs champs ajoutés par utilisateur et boîte de téléchargement

J'essaie de construire un système, où l'utilisateur peut ajouter autant de champs qu'il le souhaite à la publication. J'utilise le code de ce fil . Tout fonctionne bien, sauf que mon téléchargement ne fonctionne pas.

Voici le code que j'ai ajouté à l'intérieur de chaque boucle dans la fonction dynamic_inner_custom_box():

<input class="upload_file" type="text" size="45" id="items[%1$s][picture]" name="items[%1$s][picture]" value="%6$s" />
<input class="upload_button button" type="button" value="Upload File" />
<input class="upload_file_id" type="hidden" id="items[%1$s][picture]_id" name="items[%1$s][picture]_id" value="%6$s" />

La valeur %6$s est item['picture'] ofc. Je ne comprends pas comment ça marche. Il existe deux champs pour le téléchargement - .upload_file et .upload_file_id. Si je ne me trompe pas, je dois ajouter _id au nom de mon .upload_file et le sauvegarder sous le nom de .upload_file_id. Le problème est que, lorsque je choisis une image de la liste de téléchargement, cela ne place pas le lien dans mon champ de saisie. Cela fait un moment que je joue, et j'ai pu mettre ce lien en place en jouant avec les noms/identifiants, mais je ne pouvais pas sauvegarder les données. Qu'est-ce qui ne va pas dans mon code? Dois-je étendre d'une manière ou d'une autre la fonction de sauvegarde?

@edit Après avoir changé le code en ceci:

<input class="upload_file" type="text" size="45" id="picture_%1$s" name="picture_%1$s" value="%6$s" />
<input class="upload_button button" type="button" value="Upload File" />
<input class="upload_file_id" type="hidden" id="picture_%1$s_id" name="items[%1$s][picture]" value="%6$s" />

Je sauve enfin quelque chose et je suis capable de mettre un lien d’attachement au bon endroit un instant Lorsque je ferme une image, un lien est inséré à l'emplacement normal, mais après l'enregistrement, seuls certains numéros sont stockés dans une base de données (pièce jointe peut-être?).

2
smogg

Voici comment je l'ai fait. Aucune modification de la fonction de sauvegarde n'est nécessaire. J'ai essayé de sauvegarder les données des deux champs à la fois, c'est pourquoi cela n'a pas fonctionné.

<input class="upload_file" type="text" size="45" id="picture_%1$s" name="picture_%1$s" value="%6$s" />
<input class="upload_button button" type="button" value="Upload File" />
<input class="upload_file_id" type="hidden" id="picture_%1$s_id" name="items[%1$s][picture]" value="%7$s" />

La valeur stockée dans .upload_file_id est l'ID de pièce jointe (%7$s == item['picture']). La valeur affichée dans .upload_file (%6$s) est wp_get_attachment_image_src comme suit:

$img = wp_get_attachment_image_src($item['picture']);
$img = $img[0];

Et ensuite, nous avons défini %6$s pour être $img. Ainsi, dans la base de données, seul l'ID de pièce jointe est stocké et nous affichons le lien à l'aide de la fonction WordPress.

2
smogg