2013-02-14 5 views
0

Я создал плагин, который добавляет пользовательский тип записи, а затем приносит в кучу фиктивного контента с wp_insert_post на активацию, как так:Удаление контента с wp_delete_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 

Он работает просто отлично. За исключением того, что пользовательский тип сообщения создается с тем же плагином, через который выполняются эти две функции, тип сообщения удаляется до того, как сами записи могут быть через wp_delete_post. Когда я тестирую эти функции без специальных сообщений типа post, они добавляются после активации и удаляются при деактивации. Поэтому я знаю, что проблема связана с типом сообщения. Кто-нибудь знает, как обойти это?

ответ

2

попробовать что-то вроде этого (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).

+0

Блестящий! Работает отлично. –

1

wp_delete_post($ID, false) отправляет его в корзину. Только когда вы удаляете из корзины, сообщение действительно удаляется. Вот почему он работает с $force = true.

Так оно работает как ожидалось. Первые сообщения отправляются в корзину, затем они фактически удаляются. Как корзинка. Отметьте значение post_status, чтобы увидеть, когда он попадает в корзину, если вы хотите что-то сделать. В противном случае дождитесь удаления.

Также удалите контент по адресу uninstall, а не отключите его. Рассмотрите возможность деактивации плагина, когда он приостанавливает его и удаляет, когда вы действительно этого хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^