我有一个id:
$id = 151;
我想检查这样的存在:
$content = get_post($id);
if ($content)
echo "post $id already exists";
else
echo "post $id does not exists or was deleted";
但在WP论坛上似乎总是更喜欢问DB:
global $wpdb;
$post_exists = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE id = '" . $id . "'", 'ARRAY_A');
if ($post_exists)
echo "post $id exists";
else
echo "post $id does not exist";
那么哪种方法最好?的确,我更喜欢第一个的轻松。
答案 0 :(得分:25)
我认为最好是尽可能少地直接查询数据库
您可以使用get_post_status()函数。
如果帖子不存在,则返回false
if ( get_post_status ( $post_id ) ) {
// do stuff
}
或者,确保帖子发布
if ( 'publish' == get_post_status ( $post_id ) ) {
// do stuff
}
http://codex.wordpress.org/Function_Reference/get_post_status
答案 1 :(得分:1)
我知道这是一个非常古老的帖子,但仍然......如果你想检查是否存在某个id的帖子,你也可以使用get_permalink wordpress函数。
示例:
if( get_permalink( $post_id ) ):
echo "does exist";
else:
echo "does not exist";
endif;
请注意,get_permalink函数还会返回页面,附件链接,而不仅仅是帖子。
答案 2 :(得分:0)
我认为如果他们给你一个电话功能,你可以打电话给它;将数据库用于函数未提供的内容。
答案 3 :(得分:0)
我更喜欢通过get_post调用来查询数据库。
帖子内容可能很大。查询并将帖子的全部内容推送到字符串中只是为了检查它是否存在是非常浪费和低效的。
如果您不想直接查询数据库,可能使用get_post_field来拉取其中一个较小的字段会同样有效,但不会浪费。
答案 4 :(得分:0)
if( is_null(get_post($id))){
echo "post $id does not exists or was deleted";
}else{
echo "post $id already exists";
}
答案 5 :(得分:0)
使用WP_Query类提供有效的,不依赖SQL的解决方案:
$id = 151;
$post_exists = (new WP_Query(['post_type' => 'any', 'p'=>$id]))->found_posts > 0;
if ($post_exists)
echo "post $id already exists";
else
echo "post $id does not exists or was deleted";
请注意,get_post_status和get_permalink都加载无关数据。