Добавьте вкладки метаданных X на основе формы в верхней части мета-окна, как это сделать правильно?

Я создаю мета-ящик, который контролирует количество ингредиентов для рецепта. Поскольку у каждого рецепта будет разное количество ингредиентов, я решил использовать простой ввод текста и кнопку, чтобы установить количество ингредиентов, и jQuery динамически добавляет входы для этого номера «Х».

Я знаю, что мне нужно использовать форму jQuery, но я не уверен, как правильно вернуть html в мета-поле. У меня настроен ответ, но не уверен, как обращаться с html.

Могу ли я передать значение из текстового ввода в функцию php, которая использует цикл for, чтобы распечатать все входы для ингредиентов? Или мне нужно распечатать весь html с помощью jQuery?

Надеюсь, это имеет смысл.

Благодаря!

мой jQuery, который работает:

jQuery('#add-ingredients').click(function(event){ event.preventDefault(); var num = jQuery('input:text[name=_num_ingredients]').val(); var sections = ''; for(var i=1;i<=num;i++){ section = '<div id="ingredient-' + i + '" class="ingredient-input">\n'; section += '<div class="ingredient-amount alignleft">\n'; section += '<label for="_ingredient_amount_' + i + '">Amount: </label>\n'; section += '<input type="text" name="_ingredient_amount_' + i + '" />&nbsp;\n'; section += '</div>\n'; section += '<div class="ingredient-measurement alignleft">\n'; section += '<label for="_ingredient_measurement_' + i + '">Measurement: </label>\n'; section += '<input type="text" name="_ingredient_measurement_' + i + '" />&nbsp;\n'; section += '</div>\n'; section += '<div class="ingredient-name alignleft">\n'; section += '<label for="_ingredient_name_' + i + '">Ingredient: </label>\n'; section += '<input type="text" name="_ingredient_name_' + i + '" />&nbsp;\n'; section += '</div>\n'; section += '<div class="clear"></div>\n'; section += '</div>\n'; sections += section; }//end for //add the new input sections jQuery('#ingredients').html(sections); //show the ingredients inputs jQuery('#ingredients').show('slow'); return false; }); 

Но теперь я не могу понять, как правильно сохранить метаданные.

Вот мой цикл for:

  //loop through all ingredients and update them accordingly for($i=1; $i<=$num; $i++): $amt = '_ingredient_amount_'.$i; $meas = '_ingredient_measurement_'.$i; $name = '_ingredient_name_'.$i; //set ingredients array for each iteration $post_meta['_ingredient_amount_'.$i] = $_POST['_ingredient_amount_'.$i]; $post_meta["{$meas}"] = $_POST["{$meas}"]; $post_meta[$name] = $_POST[$name]; //update meta data foreach( $post_meta as $key => $value ): if( $value ): if( get_post_meta( $post_id, $key, FALSE) ): // If the custom field already has a value update_post_meta( $post_id, $key, $value ); else: // If the custom field doesn't have a value add_post_meta( $post_id, $key, $value ); endif; else: //delete_post_meta( $post_id, $key ); // Delete if blank endif; endforeach; endfor; 

Я знаю, что мне не хватает чего-то в синтаксисе, чтобы получить значения $ _POST. Есть идеи?

РЕДАКТИРОВАТЬ——————————-

Я не смог передать переменную $ post в свою функцию – глупо мне. Теперь все работает правильно. Спасибо за вашу помощь!

Solutions Collecting From Web of "Добавьте вкладки метаданных X на основе формы в верхней части мета-окна, как это сделать правильно?"

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

 $('#quantity-form').submit(function(){ // get # of fields that already exist // (change this to match whatever type of fields you have) var count = $('#metabox-form input[type="text"]').length; // you'll want to check if count is > or < requested quantity and possibly remove, // or clone (in a loop to add multiple fields): $('#metabox-form input[type="text"]:last') .clone(false) .attr({ name:'field-' + (count + 1), id:'field-' + (count + 1) }) .appendTo('#metabox-form'); return false; });