我对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 />";
}
}
}
}
主要问题是操作:保存注意命令谁在我按保存命令时执行两次。第一次执行没问题,但第二次在 MySQL 中生成错误(重复键主)。我不明白为什么wordpress为一个动作注册的单个函数执行两次,我认为这个问题通常在wordpress中。此操作中声明的所有函数将执行两次。
有人可以帮助我解决这个问题,或者告诉我我是否错了什么
它可能执行两次,因为 WP 正在保存两个不同的帖子,这实际上是两次使用您的程序触发操作:
- 新版本中的帖子作为帖子本身
- 旧版本的帖子作为修订版
假设是这样,您需要检查传递给调用您的操作的任何内容的 ID 是否是修订版。
我的应用程序与WordPress中的帖子没有任何关系。在其他目录中,具有其他结构。操作 saveNoteCommand 不会在 save_post/update_post 上执行。是否仅在我的脚本中执行自定义操作,并且仅提交 $_POST 数据。