Как вызвать действие после применения параметров массового редактирования, таких как редактирование или перемещение в корзину?Есть ли какие-то конкретные крючки? - PullRequest
0 голосов
/ 14 февраля 2019

После создания, редактирования или удаления нового продукта я могу удалить некоторые переходные процессы, но не смог этого сделать, если это массовое действие на панели администратора, такое как массовое редактирование или переход в корзину.

Я использовал ловушку действия 'transition_post_status', и всякий раз, когда происходит переход от старого состояния к новому состоянию или, если это сценарий обновления, выполняется мой временный код удаления.Но это не работает для массового редактирования или массового перемещения в корзину.

function ga_delete_transients( $new_status, $old_status, $post ) {//deletes transients if exists upon create,trash and update

 global $post,$wpdb;

 if ( $post->post_type !== 'product' ) return;
 if($old_status!==$new_status|| $old_status == 'publish' && $new_status =='publish'){
  $sql = "SELECT *  FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')";
  $ga_transient_result = $wpdb->get_results($sql);
   if(!empty($ga_transient_result)){

    $wpdb->query( "DELETE   FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')" );
    }
 }


 }

 add_action( 'transition_post_status', 'ga_delete_transients', 10, 3 );

Я удаляю все переходные процессы при создании, обновлении или перемещении в корзину для нового продукта, но при массовых действиях ничего не происходит.

1 Ответ

0 голосов
/ 14 февраля 2019

Это решение, основанное на пользовательском хуке пост-действий Wordpress , работает, но не подходит в случае массового удаления сообщений, так как любое массовое удаление в моем коде будет иметь значение $ post, равное нулю.

function ga_delete_transients($post) {

  global $wpdb,$post;


 if(isset($post)&&$post->post_type=='product' || !isset($post)  ) {//doesn't work in case of bulk delete of posts



  $sql = "SELECT *  FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')";
  $ga_transient_result = $wpdb->get_results($sql);
  if(!empty($ga_transient_result)){

      $wpdb->query( "DELETE   FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')" );
  }

 }
 else{
   return;
 }

}

$all_actions = array('save_post','wp_delete_post','wp_trash_post');

foreach ($all_actions as $current_action) {

  add_action($current_action, 'ga_delete_transients',1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...