0

カスタム投稿タイプを追加するプラグインをセットアップし、有効化時に wp_insert_post を使用して一連のダミー コンテンツを次のように取り込みます。

    register_activation_hook( __FILE__, array( $this, 'activate' ) );
public function activate( $network_wide ) {
        include 'dummycontent.php';
        foreach ($add_posts_array as $post){
        wp_insert_post( $post );
    };
} // end activate

プラグインが無効になったときにこのコンテンツを削除したいので、この機能を設定しました。

    register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
   public function deactivate( $network_wide ) {
        include 'dummycontent.php';
    foreach($remove_posts_array as $array){
        $page_name = $array["post_title"];
        global $wpdb;
        $page_name_id = $wpdb->get_results("SELECT ID FROM " . $wpdb->base_prefix . "posts WHERE post_title = '". $page_name ."'");
        foreach($page_name_id as $page_name_id){
            $page_name_id = $page_name_id->ID;
            wp_delete_post( $page_name_id, true );
        };
    };      
} // end deactivate

それはうまく動作します。カスタム投稿タイプは、これら 2 つの関数が実行されるのと同じプラグインで作成されるため、投稿自体が通過する前に削除されますwp_delete_post。カスタム投稿タイプを使用せずにこれらの機能をテストすると、有効化すると投稿が追加され、無効化すると削除されます。だから私は問題が投稿タイプにあることを知っています。これを回避する方法を知っている人はいますか?

4

3 に答える 3

3

次のようにしてみてください (YOUTPOSTTYPE は投稿タイプの名前です):

function deactivate () {
  $args = array (
    'post_type' => 'YOURPOSTTYPE',
    'nopaging' => true
  );
  $query = new WP_Query ($args);
  while ($query->have_posts ()) {
    $query->the_post ();
    $id = get_the_ID ();
    wp_delete_post ($id, true);
  }
  wp_reset_postdata ();
}

それは私のプラグインで動作しますが、あなたのプラグインでも動作するはずです。(これは WordPress 3.5.1 でテスト済みです)。

于 2013-02-21T21:43:01.713 に答える