Использование повторяющихся полей WPAlchemy во Front-End

Я использую WPAlchemy для создания метаданных для своих пользовательских типов записей.

Один из моих пользовательских типов постов,продавец‘, объявлен как $ vendor_mb с префиксом _vendor в WPAlchemy и имеет ниже мета-поля.

  • Адрес
  • Страна
  • Почтовый индекс
  • Веб-сайт
  • контакты <- это повторяющееся поле, созданное have_fields_and_multi.

«Контакты» — это повторяющееся поле, созданное, как показано ниже;

<!-- Repeating Fields for Contacts -->
<h4>Contacts</h4>

<?php while($mb->have_fields_and_multi('contacts')): ?>
<?php $mb->the_group_open(); ?>

<label>Contact Information</label>

<?php $mb->the_field('department'); ?>
<span>Department</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('firstname'); ?>
<span>First name</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('lastname'); ?>
<span>Last name</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('title'); ?>
<span>Title</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('email'); ?>
<span>Email</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('mobile'); ?>
<span>Mobile</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('phone'); ?>
<span>Phone</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('fax'); ?>
<span>Fax</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>

<?php $mb->the_field('remark'); ?>
<span>Remark</span>
<p><input type="text" name="<?php $mb->the_name(); ?>" value="<?php $mb->the_value(); ?>"/></p>
<?php $mb->the_group_close(); ?>
<?php endwhile; ?>

Используя этот код, у меня нет проблем с добавлением метаданных к метаполям, включая повторяющиеся поля, в пользовательском интерфейсе администратора WordPress.

Проблема заключается в том, как использовать данные во внешнем интерфейсе (я загружаю CSV-файл, содержащий информацию о нескольких контактах — Джон Доу 1, Джон Доу 2 и Джон Доу 3.)

Я пытался использовать add_post_meta, и он создает три _vendor_contacts.
Я также пытался использовать update_post_meta, и последний контакт перезаписывает первый контакт, оставляя только последний контакт в _vendor_contacts.

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

global $vendor_mb;
$vendor_mb->the_meta();
while( $vendor_mb->have_fields_and_multi( 'contacts' ) ) :
$vendor_mb->the_group_open();
$vendor_mb->the_value( 'firstname' );
$vendor_mb->the_value( 'lastname' );
$vendor_mb->the_group_close();
endwhile;

Итак, любой пример, на который я могу сослаться, где повторяющиеся поля WPAlchemy используются в front-end?

Спасибо.

0

Решение

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

В этой статье подробно объясняется, что вам нужно сделать: http://www.2scopedesign.co.uk/wpalchemy-and-front-end-posts/

Короткий ответ: вам нужно вставить сериализованный массив, а затем вставить каждое мета-значение по отдельности, например так:

 //add a serialised array for wpalchemy to work
$data = array('reviews_what_we_did','reviews_star_rating','reviews_name','reviews_email','reviews_staff_member');
$str = $data;
update_post_meta( $pid, '_single_reviews_meta_fields', $str );

//update the individual fields
add_post_meta($pid, 'reviews_what_we_did', $service);
add_post_meta($pid, 'reviews_star_rating', $rating);
add_post_meta($pid, 'reviews_name', $name);
add_post_meta($pid, 'reviews_email', $email);
add_post_meta($pid, 'reviews_staff_member', $staff);

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

В этой статье объясняется, как вставить данные в повторяющиеся поля: https://wpalchemists.com/2014/09/wpalchemy-update_post_meta/

В вашем случае вам нужно будет сделать что-то вроде этого:

$fields = array('address', 'country', 'zipcode', 'website', 'contacts');
$str = $fields;
update_post_meta( $postid, '_contact_meta_fields', $str );

$contactfields = array(
array(
'department' => $departmentvalue,
'firstname' => $firstnamevalue,
'lastname'  => $lastnamevalue,
'title' => $titlevalue,  // etc. - add all of your fields to the array
)
);

add_post_meta($postid, 'address', $addressvalue); // do this for each of your non-repeating fields
add_post_meta($postid, 'contacts', $contactfields); // this adds the repeating fields

Очень полезно напечатать мета-запись post, чтобы вы могли увидеть, как WPAlchemy создает сериализованный массив, а также каждое мета-значение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]