插件停用代码无效后删除页面

时间:2018-06-21 04:23:41

标签: php wordpress

我正在尝试停用插件后删除页面。该代码不适用于删除页面。

register_activation_hook( __FILE__, 'insert_page' );

function insert_page(){
// Create post object
$my_post = array(
  'post_title'    => 'Menu',
  'post_content'  => 'Short Code',
  'post_status'   => 'publish',
  'post_author'   => get_current_user_id(),
  'post_type'     => 'page',
);

// Insert the post into the database
wp_insert_post( $my_post, '' );
 $newvalue = wp_insert_post( $post, false );
update_option( 'Menu', $newvalue );
}
register_deactivation_hook( __FILE__, 'deactivate_plugin' );

function deactivate_plugin() {

$page = get_page_by_title('Menu');
wp_delete_post($page); 

}

我什至尝试了wp_delete_post($page, true);。它也不起作用。在我错的地方帮我。

1 个答案:

答案 0 :(得分:0)

如果您不介意,我将解决一些问题:

首先,您应该进行代码缩进/格式化。 未来,谢谢

第二次您两次调用wp_insert_post()函数,但仅工作一次。您还可以在调用update_option()之前检查wp_insert_post()是否返回真实值。

第三,小心“通用”函数名,因为这样可能会导致重新声明错误!尝试使用namespacesclasses或至少使用函数名作为前缀,以免将来出现麻烦。

第四,您无需在$error上将false参数设置为wp_insert_post(),因为它是默认值。

最后,要回答您的问题(最终!),因为wp_delete_post()需要一个帖子 ID ,并且您正在传递一个帖子 Object ,它不起作用。相反,您将要使用$page->ID。这是您上面概述的更改的代码:

register_activation_hook( __FILE__, 'so_50960355_insert_page' );
function so_50960355_insert_page(){
    // Define my page arguments
    $page = array(
        'post_title'   => 'Menu',
        'post_content' => 'Short Code',
        'post_status'  => 'publish',
        'post_author'  => get_current_user_id(),
        'post_type'    => 'page',
    );

    if( $page_id = wp_insert_post( $page ) ){
        // Only update this option if `wp_insert_post()` was successful
        update_option( 'my_menu_page_id', $page_id );
    }
}

register_deactivation_hook( __FILE__, 'so_50960355_delete_page' );
function so_50960355_delete_page(){
    $page_id = intval( get_option( 'my_menu_page_id' ) );

    // Force delete this so the Title/slug "Menu" can be used again.
    wp_delete_post( $page_id, true );
}