mal*_*ith 6 php wordpress hook wordpress-plugin advanced-custom-fields
大家好,感谢您的阅读.
环境:
Wordpress +高级自定义字段插件
问题:
我现在已经搜索了几个小时,我似乎无法找到正确的语法来执行以下操作:
发布新帖子时,获取自定义字段值,以便自动用该值替换帖子的标题.示例:我创建了一个帖子并在我的'time'自定义字段中设置'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;
}
Run Code Online (Sandbox Code Playgroud)
它必须非常简单,但我已经尝试了WP和插件文档中的所有可用功能.如果路过的人给我解决方案,我将非常感激.
提前致谢 !
调整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');
}
Run Code Online (Sandbox Code Playgroud)
您实际上可以为您的字段值访问全局 $_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');
}
Run Code Online (Sandbox Code Playgroud)
假设您的 ACF 字段名称是“时间”。
编辑:根据 Mark Chitty 的回答更新了答案。
| 归档时间: |
|
| 查看次数: |
5726 次 |
| 最近记录: |