Итак, теперь у меня есть основы PHP, и я пишу плагин для расширения Woocommerce.Я добавил пользовательскую вкладку в настройки своего продукта, и внутри вкладки я могу добавить динамическое количество пользовательских сборов, связанных с продуктом.По сути, я использую JQuery для создания div с 4 элементами select внутри.Я могу добавить любое количество элементов div (таким образом, любое количество пользовательских сборов за продукт).Я нашел способ сделать это, но я считаю, что должен быть лучший способ (в настоящее время я использую переменную 'counter' и присваиваю каждому div и выбираю числовой суффикс).Я говорю лучше, потому что, когда я удаляю div (таким образом, удаляю 'Custom Charge'), я обнаруживаю, что мне нужно перенумеровать все существующие div и выбирать элементы (в противном случае мой процесс сохранения update_post_meta завершится неудачей.
Вот как я сейчас сохраняю данные:
//Additional Charge Types
$i = $_POST['count_of_charge_types']; <-this is a hidden field
$counter = 1;
if ($i>0){
while($counter <= $i){
$add_charge_sub = array("Description" =>
esc_attr($_POST['_add_charge_desc_'. $counter]),"Charge_Type" =>
esc_attr($_POST['_add_charge_type_'. $counter]),"Charge_Value" =>
esc_attr($_POST['_add_charge_value_'. $counter]),"Charge_Method" =>
esc_attr($_POST['_add_charge_method_'. $counter]));
$add_charges[]=$add_charge_sub;
$counter++;
};
update_post_meta($post_id,'_product_add_charges',$add_charges);
Это пример HTML, чтобы вы могли понять, как называются элементы и как они сохраняются:
<div id="add_charges_1" class="options_group">
<div id="add_charges_header_1" class="desc_header">
<button id="but_remove_charge_type_1" type="button">Remove Charge Type</button>
<input type="text" class="short" style="" name="_add_charge_desc_1"
id="_add_charge_desc_1" value="Fuel Surcharge">
</div>
<input type="text" class="short" style="" name="_add_charge_value_1" id="_add_charge_value_1" value="4">
<select id="_add_charge_method_1" name="_add_charge_method_1">
<option value="unit" selected="selected">Per Unit</option>
<option value="group">Per Product Group</option>
</select>
</div>
это работает нормально, но, как я уже сказал, когда я удаляю 'Custom Charge', у меня может остаться пробел в нумерации элементов, который отбрасывает мои петли.
Может ли кто-нибудь указать мне правуюруководство о том, как генерировать элементы таким образом, чтобы я мог покончить с системой нумерации и просто сериализовать поля.
Я читал кое-что о сериализации PHP здесь , и этоговорит о создании классов. Создание классов является новым для меня, и я понятия не имею, с чего начать, и в любом случае это правильный и самый простой подход.
Причина, по которой я смотрюклассы, потому что, как вы можете видеть из кода update_post_meta, я создаю массивы и сохраняю их в БД.Я не могу просто зациклить каждый элемент в форме, используя foreach ($ _ POST как $ name => $ value), потому что мне нужны опции, чтобы оставаться вместе в массивах.
У меня есть другой мотив для попыткиХотя это нужно решить, и это потому, что на следующем этапе разработки сайта будет создано множество пользовательских опций, и я хочу сделать разработку быстрой и эффективной.