Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 在自定义帖子类型的插件中删除带有wp_delete_帖子的内容_Wordpress_Custom Post Type_Dummy Data - Fatal编程技术网

Wordpress 在自定义帖子类型的插件中删除带有wp_delete_帖子的内容

Wordpress 在自定义帖子类型的插件中删除带有wp_delete_帖子的内容,wordpress,custom-post-type,dummy-data,Wordpress,Custom Post Type,Dummy Data,我设置了一个插件,添加了一个自定义帖子类型,然后在激活时引入了一堆带有wp_insert_post的虚拟内容,如下所示: register_activation_hook( __FILE__, array( $this, 'activate' ) ); public function activate( $network_wide ) { include 'dummycontent.php'; foreach ($add_posts_array as $p

我设置了一个插件,添加了一个自定义帖子类型,然后在激活时引入了一堆带有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
它很好用。除了因为自定义帖子类型是使用运行这两个函数的相同插件创建的,帖子类型在帖子本身可以通过
wp\u delete\u post
之前被删除。当我在没有自定义post类型的情况下测试这些功能时,post会在激活时添加,在停用时删除。所以我知道问题在于帖子类型。有人知道如何解决这个问题吗?

试试这样的方法(YOUTPOSTTYPE是您的帖子类型的名称):

它在我的插件中起作用,应该在你的插件中起作用。(这已经用WordPress 3.5.1进行了测试)。

尝试类似的方法(YOUTPOSTTYPE是您的帖子类型的名称):


它在我的插件中起作用,应该在你的插件中起作用。(这已经用WordPress 3.5.1进行了测试)。

wp\u delete\u post($ID,false)
将其发送到垃圾箱。只有当您从垃圾箱中删除后,邮件才会真正被删除。这就是它与
$force=true
一起工作的原因

因此,它的工作正如预期的那样。首先,帖子被扔进垃圾桶,然后被删除。比如回收站。跟踪
post_状态
更改,查看它何时到达垃圾箱,然后再做任何事情。否则等待删除


<强>也删除内容,而不是停用。<强>考虑暂停插件,当你真的想要它时卸载它。

< P> < >代码> WpDeleTeEtPoST($ID,false)< /代码>将其发送到垃圾。< /强>只有当你从垃圾中删除时,帖子才被删除。这就是它与
$force=true
一起工作的原因

因此,它的工作正如预期的那样。首先,帖子被扔进垃圾桶,然后被删除。比如回收站。跟踪
post_状态
更改,查看它何时到达垃圾箱,然后再做任何事情。否则等待删除

<强>也删除内容,而不是停用。< /强>考虑停用插件,当你真的想要它时卸载它。

试试这个函数

function deactivate () {             
        $args = array(
            'post_type'      => 'POST_TYPE', 
            'posts_per_page' => - 1
        );

        if ( $posts = get_posts( $args ) ) {
            foreach ( $posts as $post ) {
                wp_delete_post( $post->ID, true );
            }
        }
    }
试试这个功能

function deactivate () {             
        $args = array(
            'post_type'      => 'POST_TYPE', 
            'posts_per_page' => - 1
        );

        if ( $posts = get_posts( $args ) ) {
            foreach ( $posts as $post ) {
                wp_delete_post( $post->ID, true );
            }
        }
    }

明亮的很好,太棒了!工作完美。