我需要将post ID数组传递给我在某个页面上运行的自定义SQL查询。
查询如下所示:
$querystr3 = "SELECT *,
events_startdate.meta_value AS the_start,
events_enddate.meta_value AS the_end
FROM $wpdb->posts p
LEFT JOIN $wpdb->term_relationships
ON ( p.ID = $wpdb->term_relationships.object_id )
LEFT JOIN $wpdb->term_taxonomy
ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id )
LEFT JOIN $wpdb->postmeta AS events_startdate
ON (
p.ID = events_startdate.post_id
AND events_startdate.meta_key = \'events_startdate\'
)
LEFT JOIN $wpdb->postmeta AS events_enddate
ON(
p.ID = events_enddate.post_id
AND events_enddate.meta_key = \'events_enddate\'
)
WHERE ($wpdb->term_taxonomy.term_id = 11
AND $wpdb->term_taxonomy.taxonomy = \'status\'
AND p.ID != array(1433, 1344) <--- trying to pass array here
AND p.post_type = \'pmg_events\'
AND p.post_status = \'publish\'
AND events_startdate.meta_value != \'\'
AND events_enddate.meta_value != \'\'
AND events_enddate.meta_value >= CURDATE()
)
ORDER BY events_enddate.meta_value ASC
";
$theresults3 = $wpdb->get_results($querystr3 );
如您所见,我正在尝试传递2个post ID以从正在运行的自定义SQL查询中排除。如果我传入一个号码,即:p.ID!=1433它可以工作,但传入多个post ID却不行。
我试过使用implode(\',\',$ids);
但仍然无济于事。不可能传入这样的数组吗。我不想重新编写此文件以供使用$wp_query
.
SO网友:birgire
这更像是一个SQL问题,而不是WordPress问题。
以下是一些想法:
您很可能正在寻找这种结构:
AND p.ID NOT IN (1433, 1344)
您应该考虑使用
$wp->prepare()
如果您的查询依赖于某些用户输入。
您可能还需要替换CURDATE()
使用PHP生成的日期字符串,看看它是否能提高性能。
一般来说,使用WP_Query()
尽可能避免这种硬编码的SQL混蛋;-)