在前端使用WPAlchemy重复字段

时间:2014-11-05 06:25:49

标签: php wordpress repeat

我正在使用WPAlchemy为我的自定义帖子类型创建元数据。

我的一个自定义帖子类型“供应商”在WPAlchemy中被声明为 $ vendor_mb ,前缀为 _vendor ,并且在下面元字段。

  • 地址
  • 国家
  • 邮政编码
  • 网站
  • 联系人< - 这是由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 Admin UI中将元数据添加到元字段(包括重复字段)。

问题是如何使用前端的数据(我正在上传包含多个联系人信息的csv文件 - John Doe 1,John Doe 2和John Doe 3.)

我尝试使用 add_post_meta ,并创建了三个_vendor_contacts。 我还尝试使用 update_post_meta ,后者联系人会覆盖前一个联系人,只留下_vendor_contacts中的最后一个联系人。

我进一步尝试在执行下面的add_post_meta或update_post_meta之前获取_vendor_contacts中的现有值,但它不起作用并且不回显任何内容。

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在前端使用重复字段的任何例子吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

因为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_r对post meta非常有帮助,这样你就可以看到WPAlchemy如何创建一个序列化数组以及每个元值。