基于ACF中继器字段的UPDATE_POST_META

时间:2015-05-17 作者:Ahmed Saad

我正在尝试使用此函数更新acf repeater字段中的post meta,但它不起作用:

function save_photos_meta_data( $post_id ) {
    if( get_field(\'photos\') ) {
        update_post_meta( $post_id, \'has_images\', \'yes\' );
    } else {
        update_post_meta( $post_id, \'has_images\', \'no\' );
    }
}
add_action( \'save_post\', \'save_photos_meta_data\' );
在哪里photos 是acf字段的名称。

2 个回复
SO网友:pingle60

首先,您需要获得ACFField_XXXXXXX 您的转发器字段已分配的标签,可以通过发出以下查询找到,

选择pm。“..$wpdb->前缀”中的meta\\u键postmeta pm加入“..$wpdb->前缀”在采购订单上发布采购订单。ID=pm。post\\u id,其中pm。meta\\u值,如“{中继器字段名}%”和po。post\\u标题=“{字段组名称}”

您可以使用wpdb->get_results()[0][\'meta_key\'], 获取的值pm.meta_key.

代替{The Field Group Name} 使用分配给ACF字段的字段组名称,

代替{The repeater field name} 具有转发器字段名称(不是子字段)。

这个acf_repeater 字段正在查找数组,

给定的照片是您的acf转发器字段名,您没有指定子字段名,因此将使用image作为子字段名,

$photos = array (array(\'image url\'));

foreach ($photos as $key => $value) {

    update_metadata(\'post\', \'photos_\'.$key.\'_image\', $value);
    update_metadata(\'post\', \'_photos_\'.$key.\'_image\', \'_photos\'.$key.\'_image\');

}
现在您必须更新acf repeater字段,

update_metadata(\'post\', $post_id, \'photos\', count($photos));
update_metadata(\'post\', $post_id, \'_photos\', $field_key);
在哪里$photos 是照片阵列,并且$field_keymeta_key 从上面的SQL查询中获取。

此链接很好地解释了元表中的转发器字段名称,https://support.advancedcustomfields.com/forums/topic/adding-rows-into-a-repeater-field-programatically/

SO网友:pingle60
/**
 * Function: update_acf_repeater_field
 * Parameters:  $meta_type = post|user|comment
 *              $field_group_name = the name of ACF Field Group
 *              $repeater_field_name = the repeater field name 
 *              $subfields = a multidimensional array with the array keys matching the
 *                      the sub field names, e.g., array(array(\'subfield_name\'=>\'value\',\'subfield_name\'=>\'value\'))
 *              $post_id = the post id, user id or comment id 
 *
 * Developer: Patrick Ingle (https://github.com/patrickingle)
 *
 * Problem Resolved: Adding an ACF repeater field to a new post, comment or user. 
 *
 */
 function update_acf_repeater_field($meta_type,$field_group_name,$repeater_field_name,$subfields=array(),$post_id) {
global $wpdb;

foreach($subfields as $key => $subfield) {
    foreach ($subfield as $subkey => $value) {
        update_metadata($meta_type, $post_id, $repeater_field_name.\'_\'.$key.\'_\'.$subkey, $value);
        update_metadata($meta_type, $post_id, \'_\'.$repeater_field_name.\'_\'.$key.\'_\'.$subkey, $repeater_field_name.\'_\'.$key.\'_\'.$subkey);
    }
}
$sql = "SELECT pm.meta_key FROM ".$wpdb->prefix."postmeta pm JOIN ".$wpdb->prefix."posts po ON po.ID = pm.post_id WHERE pm.meta_value LIKE \'%$repeater_field_name%\' AND po.post_title=\'$field_group_name\'";
$field_key = $wpdb->get_results($sql,ARRAY_A)[0][\'meta_key\'];
update_metadata($meta_type, $post_id, $repeater_field_name, count($subfields));
update_metadata($meta_type, $post_id, \'_\'.$repeater_field_name, $field_key);
}
结束

相关推荐