php 使用wp_delete_post是否足够?

niwlg2el  于 2023-02-28  发布在  PHP
关注(0)|答案(2)|浏览(93)

我想知道是否仅仅使用wp_delete_post($post_id, true);就足以删除DB中与帖子绑定的所有内容,跳过垃圾。
根据documentation,它是,但有几个答案在互联网上提到使用delete_post_ meta也,像这样:

// Delete all Post Meta
foreach (get_post_meta($post_id) as $key => $val)  {
    delete_post_meta($post_id, $key);
}

wp_delete_post($post_id, true);

最佳实践是什么?

w51jfk4q

w51jfk4q1#

根据你所链接页面上的源代码,wp_delete_post($post_id, true);删除了所有链接到帖子的元数据和评论。它强制删除帖子,因此绕过了垃圾桶。作为对你问题的回答,这就足够了。

代码中的引用(wp-includes/post.php:3438-3448):

$comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d ORDER BY comment_ID DESC", $postid ) );
foreach ( $comment_ids as $comment_id ) {
    wp_delete_comment( $comment_id, true );
}

wp_defer_comment_counting( false );

$post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid ) );
foreach ( $post_meta_ids as $mid ) {
    delete_metadata_by_mid( 'post', $mid );
}

如果您只想删除post meta,请不要使用wp_delete_post(),而使用delete_post_meta()

dfuffjeb

dfuffjeb2#

是的。使用wp_delete_post($post_id,true)可以删除数据库中所有与帖子相关的信息,包括附件和帖子 meta数据,并绕过垃圾桶,导致立即删除。但是,如果您想删除与帖子相关的帖子元数据,除了wp_delete_post()函数之外,还应该使用delete_post_meta()函数。

相关问题