2012-04-30 34 views
0

我目前正在使用wordpress插件。该插件包含一个数据库表,每次使用该帖子的数据创建,编辑或删除帖子时都会更新该数据库表。此表中的一列是“post_status”,我需要随时更新帖子的状态。现在我正在使用此代码:在wordpress管理器中添加过滤器到“快速编辑菜单”

function filter_transition_post_status($new_status, $old_status, $post) { 
    global $post; 
    global $wpdb; 
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=$post->ID"); 
} 
add_action('transition_post_status', 'filter_transition_post_status', 10, 3); 

上述代码正常工作时,我更改“编辑帖子”页面内的发布状态。当我更改帖子的状态时,更改也发生在我的表格中。但是,当我使用“快速编辑”模式更改帖子或批量更改多个帖子的状态时,代码不起作用。这个变化不会发生在我的表格中。 任何帮助解决这个问题将不胜感激。 谢谢

+0

可能,这将有助于http://codex.wordpress.org/Plugin_API/Action_Reference/save_post –

+0

谢谢Shelikh。我在您发布的链接中找到了解决方案。我在下面添加了我的答案。 – Eyal

回答

0

我找到了解决方案。当使用“快速编辑”模式更新帖子时,不能使用全局$帖子像“编辑帖子”页面中那样检索帖子ID,而是使用$ _GET ['ID']。所以,为了掩饰这两个选项,“快速编辑”和“编辑文章”我使用了以下功能:

function filter_transition_post_status($new_status, $old_status, $post) { 
    global $wpdb; 
    global $post; 
    $my_id = get_post($_GET['ID']); 
    is_array($my_id) ? $post_id = $my_id[ID] : $post_id = $post->ID; 
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=" .$post_id); 
} 
add_action('transition_post_status', 'filter_transition_post_status', 10, 3); 

功能检查,如果$添加my_id得到$ _GET [ID](在“快速编辑什么“页面),如果是的话,它将使用它,否则它将使用全局$ post来获得id。

更新:

我比Stephen Harris一个更好的解决方案 - “你不想要引用全局$岗位,但毕竟是给你们争论的一个职位你只需要删除全局$邮报”

function wpse50651_filter_transition_post_status($new_status, $old_status, $post) { 

    global $wpdb; 

    $wpdb->query( 
     $wpdb->prepare( 
      "UPDATE my_table SET post_status=%s WHERE post_id=%d", 
      $new_status,$post->ID 
     ) 
    ); 
} 
add_action('transition_post_status', 'wpse50651_filter_transition_post_status', 10, 3); 
相关问题