我有一个问题,我已经尝试解决了一段时间了。在我看来,这项任务与那些使用 ACF 并希望将字段从一篇文章替换到另一篇文章的人相关。有人可能有兴趣帮助解决这个问题,或者以前解决过它。
有需要以编程方式更新的 ACF 字段 - 在不重新加载页面的情况下替换另一条记录中的字段,即在管理员中使用 ajax。
做了什么: 1.连接ajax到admin - functions.php
add_action( 'admin_enqueue_scripts', function() {
wp_enqueue_script( 'ajax-acf', get_stylesheet_directory_uri() . '/ajax-acf.js', array( 'jquery' ), time(), true );
} );
2.单击输入按钮时运行 jquery(收到“确定”响应)-我使用 ACF Extended 插件中的按钮。
jQuery( function ( $ ) {
$ ('.acf-field-64647e4980e03').click( function(){
var input = $(this);
$.ajax({
type : 'POST',
url : ajaxurl,
data:{
action:'my_acf_update',
post_id: $_POST['post_id']
},
success : function( data ) {
alert( data );
}
})
} );
} );
以下钩子不起作用 - 弹出窗口中仅返回“ok0”
add_action( 'wp_ajax_my_acf_update', function(){
// Get post id
$post_id = $_POST['post_id'];
// Get id another post from the relation field
$another_post_id = get_field('Blocks-FirstSlide-copyBlock', $post_id );
// Getting data
$source_fields = get_fields($another_post_id );
// Update fields in this post
foreach ($source_fields as $field_name => $field_value) {
update_field($field_name, $field_value, $post_id);
}
update_field( 'Blocks-FirstSlide-copyBlock', $another_post_id, $post_id );
echo 'ok';
wp_die;
});
还有一个 have hook 可以解决问题,但需要重新启动(当我保存帖子时)。在这种情况下,真/假字段也管理钩子:
// Substitution of field values
add_action('acf/save_post', 'my_acf_save_post', 20);
function my_acf_save_post( $post_id ) {
// Checking if substitution is needed
$acf_value = get_field('Blocks-FirstSlide-update', $post_id);
if ($acf_value == true) {
// Get id another post from the relation field
$another_post_id = get_field('Blocks-FirstSlide-copyBlock', $post_id );
// Getting data
$source_fields = get_fields($another_post_id );
// Update fields in this post
foreach ($source_fields as $field_name => $field_value) {
update_field($field_name, $field_value, $post_id);
}
update_field( 'Blocks-FirstSlide-copyBlock', $another_post_id, $post_id );
}
}