2014-11-05 89 views
0

我正在使用WPAlchemy为我的自定义帖子类型创建元数据。在前端使用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中的最后一个联系人。

在进行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

因为WP Alchemy将数据存储为序列化数组,所以您必须做一些奇怪的事情来准备插入重复字段。

本文详细地介绍了需要做什么:http://www.2scopedesign.co.uk/wpalchemy-and-front-end-posts/

简短的回答是,你需要插入一个序列化数组,然后分别插入每个meta值,就像这样:

//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 

这真的很有帮助的print_r后元,这样您可以看到WPAlchemy如何创建序列化数组以及每个元值。