情况:我的客户使用WP\\U查询构建了一个简单的库,显示添加到站点的最新媒体:
$cola = new WP_Query(
array(
\'post_type\' => \'attachment\',
\'post_status\' => \'inherit\',
\'posts_per_page\' => 15,
\'post_mime_type\' => \'image/jpeg\',
\'orderby\' => \'date\'
));
这很好用。除了现在,我们正在使用AdRotate并希望在网站上显示广告,但我们不希望将这些广告添加到上面的查询中。
一个简单的解决方案是只获取附加到帖子/页面的媒体,因为广告永远不会附加到任何内容。这可以通过使用post_parent: array(_of_all_post_ids)
- 除了我们现在已经有了大约4k的帖子,所以这绝对不是一个好方法。
有什么办法吗?
注意:我的客户不是技术人员,所以这就是为什么我排除使用FTP来使用AdRotate在wp内容上创建的横幅文件夹。对于他们的计划用途,媒体画廊将是广告的完美之选
最合适的回答,由SO网友:Boone Gorges 整理而成
与您的post_parent
想法是在posts_where
:
function bbg_filter_out_non_attachments( $sql ) {
global $wpdb;
// Maybe do some conditional logic to decide whether to filter this query, then...
return $sql . " AND $wpdb->posts.post_parent != 0 ";
}
add_filter( \'posts_where\', \'bbg_filter_out_non_attachments\' );
另一种技术是手动查询没有
post_parent
, 然后把它传给
post__not_in
:
$ad_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = 0 AND post_type = \'attachment\'" ) );
$query_args[\'post__not_in\'] = $ad_ids;
// etc
如果您不喜欢直接使用SQL,也可以将一些内容拼凑在一起,为通过媒体库(而不是新帖子)上传的每个项目添加一段postmeta,然后包括
meta_query
中的参数
WP_Query
. 然而,请注意,这远不如简单地寻找
post_parent
(这是已经存在的数据,不需要表联接)。