我正在尝试通过编程为过滤器设置“meta\\u query”,该过滤器应该根据元键的存在来过滤自定义帖子类型。我尝试了几种方法,我在下面的代码中留下了这些方法,并将其注释掉。所有解决方案都没有更改实际的$query“meta\\u query”属性,该属性顽固地保持设置为“false”。
我觉得我错过了一些基本的东西。请协助。非常感谢。
add_filter( \'parse_query\', \'filter_posts_by_no_associated_contact\' );
function filter_posts_by_no_associated_contact( $query ) {
global $pagenow;
$qv = &$query->query_vars;
if( $pagenow == \'edit.php\' &&
isset($qv[\'post_type\']) && $qv[\'post_type\'] == \'act\'
&& isset($_GET[\'contact_status\']) && $_GET[\'contact_status\'] != \'\' ){
$compare = ( $_GET[\'contact_status\'] == \'with_contact\' ) ? \'EXISTS\' : \'NOT EXISTS\';
// $query->meta_query[] = array(
$metaquery = array(
\'key\' => \'contact_associated\',
\'value\' => \'justAstring\',
\'compare\' => $compare,
\'type\' => \'CHAR\'
);
$query->set( \'meta_query\', $metaquery );
}
}
我已经看过了
elsewhere:
$qv = &$query->query_vars;
$qv[\'meta_query\'] = array();
$qv[\'meta_query\'][] = array(
\'field\' => \'meta-key\',
\'value\' => $whatever,
\'compare\' => \'\',
\'type\' => \'\'
);
但此解决方案会导致php“警告:尝试修改非对象的属性”。