我使用WPAlchemy为我的自定义post类型创建元数据。
我的自定义post类型之一‘供应商’被声明为$vendor_mb,前缀为_vendor in WPAlchemy,并且在元字段下面。
“联系人”是一个重复的字段,如下所示;
<!-- 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中向元字段(包括重复字段)添加元数据。
问题是如何在前端使用数据(我正在上传一个包含多个联系人信息的csv文件-- John 1、John 2和John 3)。
我尝试使用add_post_meta,,它创建了三个_vendor_contacts。我还尝试使用update_post_meta,,而后者则覆盖前一个联系人,只在_vendor_contacts中留下最后一个联系人。
在按下面的方式执行_vendor_contacts或update_post_meta之前,我进一步尝试在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重复字段的任何示例吗?
谢谢。
发布于 2015-01-22 01:28:15
因为WP炼金术士将数据存储为序列化数组,所以您必须做一些奇怪的事情来准备插入重复字段。
本文详细解释了您需要做的工作: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);但是,此片段仅适用于普通字段,而不适用于重复字段。重复字段增加了另一层复杂性。
本文解释如何将数据插入重复字段: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这对print_r post元非常有帮助,这样您就可以看到WPAlchemy如何创建序列化数组以及每个元值。
https://stackoverflow.com/questions/26750959
复制相似问题