Wordpress插件uninstall.php

时间:2014-08-08 08:04:26

标签: php wordpress uninstall

我正在尝试编写一个简单的插件,除其他外,还会创建一个自定义的帖子类型。 我一直在搜索,但我真的不知道如何编写卸载函数,删除自定义帖子类型及其所有条目。

我在WordPress手抄本上找到了这个,但我不明白该怎么做..羞耻

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

$option_name = 'plugin_option_name';

delete_option( $option_name );

// For site options in multisite
delete_site_option( $option_name );  

//drop a custom db table
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}mytable" );

有人可以帮忙吗?

提前致谢

这是正确的吗?

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

    global $wpdb;

    $posts_table = $wpdb->posts;

    $query = "
        DELETE FROM wp_posts 
        WHERE post_type = 'messages' 
    ";

$wpdb->query($query);

1 个答案:

答案 0 :(得分:0)

WP codex页面http://codex.wordpress.org/Function_Reference/register_uninstall_hook包含2条重要信息,其中只有1条在您的问题中列出。你需要确保注册钩子。

除此之外,如果你想删除所有自定义帖子数据(无论是在卸载时还是另一个人评论有一个单独的按钮来删除尽可能多的插件所做的数据),你需要确保删除postmeta记录为好。

global $wpdb;
$cptName = 'messages';
$tablePostMeta = $wpdb->prefix . 'postmeta';
$tablePosts = $wpdb->prefix . 'posts';

$postMetaDeleteQuery = "DELETE FROM $tablePostMeta".
                      " WHERE post_id IN".
                      " (SELECT id FROM $tablePosts WHERE post_type='$cptName'";
$postDeleteQuery = "DELETE FROM $tablePosts WHERE post_type='$cptName'";

$wpdb->query($postMetaDeleteQuery);
$wpdb->query($postDeleteQuery);