我的卸载。php文件不会在卸载时删除我的自定义帖子以及与之相关的元数据。插件文件被删除,但数据库中没有任何内容。
如果有人能看看这张照片,看看我是不是做错了什么,还是遗漏了什么,我将不胜感激。
谢谢
// If uninstall is not called from WordPress, or the current user doesn\'t have the capability to delete plugins
if ( !defined( \'WP_UNINSTALL_PLUGIN\' ) || !current_user_can_for_blog( $GLOBALS[\'blog_id\'], \'delete_plugins\' ) ) {
exit();
}
// Remove posts of the \'mrlpt_client\' type from DB and the post meta
function mrlpt_delete_plugin() {
$mrlpt_client_posts = get_posts( array(
\'numberposts\' => -1,
\'post_type\' => \'mrlpt_client\',
\'post_status\' => \'any\' ) );
foreach ( $mrlpt_client_posts as $mrlpt_client_post ) {
delete_post_meta( $mrlpt_client_post->ID, \'_mrlpt_client_email\' );
delete_post_meta( $mrlpt_client_post->ID, \'_mrlpt_client_phone_num\' );
wp_delete_post( $mrlpt_client_post->ID, true );
}
}
mrlpt_delete_plugin();
Edit:
我尝试过使用sql查询,但它仍然不能正常工作。我在一个多站点设置中工作,并且帖子和帖子元数据在主站点(wp\\)上被删除。但是,第二个站点(wp\\u 4\\u)不工作,未删除任何内容。
在多站点工作时,我缺少什么?这很奇怪,因为我的主插件文件中有另一个sql查询,可以动态填充表单中的下拉字段,而且效果很好。
global $wpdb; // Must have this or else!
$postmeta_table = $wpdb->postmeta;
$posts_table = $wpdb->posts;
$wpdb->query("DELETE FROM " . $postmeta_table . " WHERE meta_key = \'_mrlpt_client_email\'");
$wpdb->query("DELETE FROM " . $postmeta_table . " WHERE meta_key = \'_mrlpt_client_phone_num\'");
$wpdb->query("DELETE FROM " . $posts_table . " WHERE post_type = \'mrlpt_client\'");
Edit 2:
在第二个站点(wp\\u 4\\u2)的前缀中进行硬编码,而不是使用$wpdb,然后它会删除数据库中的帖子和元数据。但是,显然我不能硬编码。
你知道这里发生了什么吗?我真的被难住了。
SO网友:MagicalCodeMonkey
我只是在搜索中发现了这个,我想我会回复,以防你没弄明白。
我不是百分之百确定最好的方法,但我可以提供一些可能有用的信息。
$wpdb同时具有prefix和base\\u prefix成员,因此您可以通过引用$wpdb->prefix并在查询中使用它来获取“wp\\u 4\\u”。
根据您所拥有的资源,您可以对$Posteta\\u表和$posts\\u表执行字符串替换,这样,如果将它们设置为wp\\uu而不是前缀(在本例中为“wp\\u4”),则可以替换它并运行查询。
可能是这样的:
global $wpdb; // Must have this or else!
$postmeta_table = $wpdb->postmeta;
$posts_table = $wpdb->posts;
$postmeta_table = str_replace($wpdb->base_prefix, $wpdb->prefix, $postmeta_table);
$postmeta_table = str_replace($wpdb->base_prefix, $wpdb->prefix, $postmeta_table);
$wpdb->query("DELETE FROM " . $postmeta_table . " WHERE meta_key = \'_mrlpt_client_email\'");
$wpdb->query("DELETE FROM " . $postmeta_table . " WHERE meta_key = \'_mrlpt_client_phone_num\'");
$wpdb->query("DELETE FROM " . $posts_table . " WHERE post_type = \'mrlpt_client\'");
再说一次,我不确定这是最好的方式,但它应该能让你达到你想要去的地方。
参考文献: