使用 Ajax 更新 Wordpress 管理中的 ACF 字段

问题描述 投票:0回答:0

我有一个问题,我已经尝试解决了一段时间了。在我看来,这项任务与那些使用 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 );
  }
}
ajax wordpress advanced-custom-fields
© www.soinside.com 2019 - 2024. All rights reserved.