大家好,感谢您的阅读。
环境:
Wordpress +高级自定义字段插件
问题:
我现在已经搜索了几个小时,我似乎找不到正确的语法来执行以下操作:
发布新帖子时,请获取自定义字段值,以便自动使用该值替换帖子的标题。示例:我创建了一个帖子并在“时间”中设置了“10am”自定义字段。该帖子的标题自动被'上午10点'取代。
示例:
所以我添加了一个包含以下内容的过滤器:
add_filter('wp_insert_post_data', 'change_title') ;
function change_title($data)
{
$time = XXX ; // How should I get this custom field value ?
$new_title = 'Topic created at'.$time ;
$data['post_title'] = $time ;
return $data;
}
它必须非常简单,但我已经尝试了WP和插件文档上的所有可用功能。如果有人路过,我会非常感谢给我解决方案。
提前致谢!
答案 0 :(得分:8)
调整Riadh接受的答案(将添加评论但尚未获得足够的代表):
正如WordPress Codex wp_update_post
中所述,包含save_post
挂钩,因此在wp_update_post()
挂钩内调用save_post
会产生无限循环。为了避免这种情况,取消挂钩然后重新挂钩你的功能:
add_action('save_post', 'change_title');
function change_title($post_id) {
$time = get_field('time',$post_id);
$post_title = 'Topic created at '. $time;
// unhook this function so it doesn't loop infinitely
remove_action('save_post', 'change_title');
// update the post, which calls save_post again
wp_update_post(array('ID' => $post_id, 'post_title' => $post_title));
// re-hook this function
add_action('save_post', 'change_title');
}
答案 1 :(得分:3)
您实际上可以为您的字段值访问全局$ _POST变量,但我想您可以通过使用save_post操作来更新帖子的标题,以更清洁的方式执行此操作,例如:
add_action('save_post', 'change_title');
function change_title($post_id) {
$time = get_field('time',$post_id);
$post_title = 'Topic created at '. $time;
// unhook this function so it doesn't loop infinitely
remove_action('save_post', 'change_title');
// update the post, which calls save_post again
wp_update_post(array('ID' => $post_id, 'post_title' => $post_title));
// re-hook this function
add_action('save_post', 'change_title');
}
假设您的ACF字段名称为“时间”。
编辑:根据Mark Chitty的回答更新了答案。
答案 2 :(得分:0)
你可以试试这个
add_filter( 'wp_insert_post_data', 'change_title', '99', 2 );
function change_title($data , $postarr){
$custom_field = 'custom_filed_name';
$post_id = $postarr['ID'];
$time = get_post_meta( $post_id, $custom_field, true );
// Now you have the value, do whatever you want
}
答案 3 :(得分:0)
高级自定义字段为每个创建的自定义字段创建“字段键”。尝试访问自定义字段时,我能够引用此键值。在Wordpress管理部分中查看帖子类型时,可以通过查看页面源找到字段键值。
寻找'data-field-key'。您将在页面源中看到类似于data-field-key =“field_5847b00820f13”的值。访问wp_insert_post_data
过滤器中$ postarr参数中的值时使用此值。自定义字段将位于$ postarr参数中名为“fields”的嵌套数组中。
或者,可以通过从admin部分导航到“高级自定义字段/导出”选项来定位字段键值。进入高级自定义字段的导出页面后,选择导出到PHP选项,您将在生成的PHP代码中看到该值。
在下面的示例中,我将连接两个高级自定义字段并更新从函数返回的$ data数组中的post_title。
结果是post_title值将通过内置的Wordpress保存帖子逻辑保存到数据库中。
add_filter('wp_insert_post_data', 'slb_set_title', '99', 2);
function slb_set_title ($data, $postarr){
if($data['post_type']==='slb_subscriber'){
$data['post_title'] = $postarr['fields']['field_5847b00820f13'] .' '.
$postarr['fields']['field_5847b03f20f14'];
}
return $data;
}