首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在前端使用WPAlchemy重复字段

在前端使用WPAlchemy重复字段
EN

Stack Overflow用户
提问于 2014-11-05 06:25:49
回答 1查看 225关注 0票数 0

我使用WPAlchemy为我的自定义post类型创建元数据。

我的自定义post类型之一‘供应商’被声明为$vendor_mb,前缀为_vendor in WPAlchemy,并且在元字段下面。

  • 地址
  • 国家/地区
  • 邮编
  • 网站
  • 联系人<-- --这是have_fields_and_multi创建的一个重复字段。

“联系人”是一个重复的字段,如下所示;

代码语言:javascript
复制
<!-- 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中获取现有的值,但是它不工作,也不回显任何东西。

代码语言:javascript
复制
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重复字段的任何示例吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 01:28:15

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

本文详细解释了您需要做的工作:http://www.2scopedesign.co.uk/wpalchemy-and-front-end-posts/

简单来说,您需要插入一个序列化数组,然后单独插入每个元值,如下所示:

代码语言:javascript
复制
 //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/

在您的情况下,您需要这样做:

代码语言:javascript
复制
$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如何创建序列化数组以及每个元值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26750959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档