Метабокс с несколькими полями, добавленными пользователем и полем загрузки


Я пытаюсь создать систему, в которой пользователь может добавлять в сообщение столько полей, сколько ему нужно. Я использую код из этого потока. Все работает нормально, за исключением того, что я не могу заставить свою загрузку работать.

Вот код, который я добавил внутри цикла foreach в функции 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" />

Значение %6$s равно item['picture'] ofc. Я не понимаю, как это работает. Есть два поля для загрузки - .upload_file и .upload_file_id. Если я прав, мне нужно добавить _id к моему имени .upload_file и сохраните его как имя .upload_file_id. Проблема в том, что когда я выбираю какое-либо изображение из толстого поля загрузки, оно не помещает ссылку в мое поле ввода. Я уже некоторое время играю, и мне удалось установить эту ссылку, играя с именами/идентификаторами, но я не смог сохранить данные. Что неверно в моем коде? Нужно ли мне как-то расширить функцию сохранения?

@редактировать После изменения кода на этот:

<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" />

Я наконец-то что-то сохранил и могу разместить ссылку на вложение в нужном месте на мгновение. Когда я выбираю картинку, ссылка вставляется туда, где она должна быть, но после сохранения в базе данных сохраняются только некоторые номера (возможно, идентификатор вложения?).

Author: Community, 2012-09-04

1 answers

Вот как я это сделал. Никаких изменений в функции сохранения не требуется. Я пытался сохранить данные из обоих полей сразу, вот почему это не сработало.

<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" />

Значение, хранящееся в .upload_file_id, является идентификатором вложения (%7$s == item['picture']). Значение, отображаемое в .upload_file (%6$s) является wp_get_attachment_image_src таким образом:

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

, А затем мы устанавливаем %6$s равным $img. Таким образом, в базе данных хранится только идентификатор вложения, и мы показываем ссылку с помощью функции WordPress.

 2
Author: smogg, 2012-09-04 12:24:09