2014-12-10 2 views
0

У меня есть большая проблема с wp.4.0.1. Я делаю для клиента программное обеспечение управляющей компании, и все основывается на функциях wordpress/плагинах/действиях &.Пользовательские действия/фильтры Wordpress выполняются дважды

class AppNoteCommand{ 
    function AppNoteCommand() { 
     $this->table_note = 'wp_app_noteCommand'; 
     $this->table_stock = 'wp_app_products_stock'; 
     $this->instance = $this; 

     add_action('saveNoteCommand', array($this, 'hookSaveNoteCommand'), 10, 4); 
     add_action('saveNoteCommand', array($this, 'updatingStock'), 20, 4); 
    } 
    function hookSaveNoteCommand($noteFields, $clientFields, $stockFields, $dbAction) { 
     global $wpdb; 
     printr($noteFields); 
     if ($dbAction == 'update' && (int) $noteFields['id'] >0) { 
      $wpdb->update($this->table_note, $noteFields, array('id' => $noteFields['id'])); 
     } else $wpdb->insert($this->table_note, $noteFields); 
    } 
    function updatingStock($noteFields, $clientFields, $stockFields, $dbAction) { 
     global $wpdb; 
     printr($stockFields); 
     if ($dbAction != 'update') { 
      foreach ($stockFields['products'] as $product_id=>$stock) { 
       $wpdb->query("UPDATE {$this->table_stock} SET stock=stock-{$stock} WHERE product_id='{$product_id}' AND location_id='{$stockFields['location_id']}'"); 
       echo mysql_error()."<br />"; 
      } 
     } 
    } 
} 

Основная проблема - действие: saveNoteCommand, который выполняется дважды, я нажимаю Save Command. Первое исполнение выполнено нормально, но второе генерирует ошибку в MySQL (дубликат основного ключа). Я не понимаю, почему wordpress выполнил дважды одну функцию, зарегистрированную для действия, и я думаю, что эта проблема обычно находится в wordpress. Все функции, объявленные в этом действии, выполняются дважды.

Может кто-нибудь поможет мне это исправить, или сказать мне, если я неправильно что-то

+0

Почему у вас есть 'add_action()' внутри самой функции? – rnevius

ответ

0

Это, вероятно, выполняет его в два раза, потому что WP сохраняет две разные должности, которые в перспективе огневые действия с вашей процедуры дважды:

  • пост в своей новой версии, как и сам пост
  • пост в старой версии как пересмотр

Если предположить, что это так, что вам нужно чтобы проверить, прошел ли идентификатор, переданный во все, что вызывает ваше действие, или нет.

0

мое приложение не имеет никакого отношения к сообщению в wordpress. Есть в другом каталоге, имеют другую структуру. Действие saveNoteCommand не выполняется на save_post/update_post. Является ли пользовательское действие, выполняемое только в моем скрипте, и только данные $ _POST передаются.

Смежные вопросы