Wordpress自定义操作/过滤器执行两次

时间:2014-12-10 11:09:26

标签: php mysql wordpress

我的wp.4.0.1存在很大问题。我为客户制作了一个管理公司软件,一切都基于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 />";
            }
        }
    }
 }

主要问题是action:saveNoteCommand执行两次我按下Save Command。第一次执行是好的,但第二次执行在MySQL中生成错误(重复键主要)。我不明白为什么wordpress执行两次为一个动作注册的单个函数,我认为这个问题通常在wordpress中。此操作中声明的所有函数都会执行两次。

有人可以帮我解决这个问题,或者告诉我,如果我错了什么

2 个答案:

答案 0 :(得分:0)

它可能会执行两次,因为WP正在保存两个不同的帖子,这些帖子用你的程序两次触发动作:

  • 新版本中的帖子作为帖子本身
  • 旧版本中的帖子作为修订版

假设是这样,您需要检查传递给调用您的操作的内容的ID是否为修订版。

答案 1 :(得分:0)

我的应用程序与wordpress中的帖子没有任何关系。在其他目录中,有其他结构。 save_otet / update_post上未执行操作saveNoteCommand。是仅在我的脚本中执行的自定义操作,只有$ _POST数据被提交。