有人可以告诉我如何修改下面的代码,以便过滤掉修订版吗?我尝试使用修订删除插件,但它们只适用于帖子或页面的修订...而不是自定义帖子类型。
<?php
global $wpdb;
global $post;
$review_id = $post->ID;
if (get_post_type($review_id) == "features") {
$assoc_id = get_post_meta($review_id, "associated_hosts_value", true);
$review_id = intval($assoc_id);
}
$assoc = $wpdb->get_col("SELECT DISTINCT post_id from wp_postmeta WHERE (meta_key='associated_hosts_value') AND ((meta_value LIKE ',{$review_id},%') OR (meta_value LIKE '%,{$review_id},%') OR (meta_value = '{$review_id}') OR (meta_value LIKE '%,{$review_id}'));");
答案 0 :(得分:1)
修订版存储在post_type列下的wp_posts
中,因此您需要在wp_posts上进行内部联接并查询post_type NOT IN ('revision')
:
"SELECT DISTINCT post_id from {$wpdb->postmeta} INNER JOIN {$wpdb->posts} ON ID = post_id WHERE post_type NOT IN ('revision') ..."
顺便说一下,将原始SQL查询插入到get_col中是一种不好的做法,因为它使您容易受到SQL注入的攻击。使用$wpdb->prepare()
,如下所示:
http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
请注意,您需要转义LIKE语句中使用的%
,方法是将其更改为%%
以在prepare()
内工作。
此外,您不应该将WP表名硬编码到查询语句中。 wpdb类存储用于构造查询的表名,即$wpdb->posts
,$wpdb->postmeta
。使用这些可确保您的插件始终查询正确的WP表。在多站点安装中尝试使用您的代码,以找出重要的原因。