如果我使用以下代码,它将正常工作:
new WP_Query([
\'post_status\' => \'publish\',
\'post_type\' => "some_custom_post_type",
\'orderby\' => \'DATE\',
\'order\' => \'DESC\',
\'facetwp\' => true,
\'posts_per_page\' => 15,
\'paged\' => $paged,
\'_meta_or_title\'=> $_POST[\'query\'],
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'some_meta_value1\',
\'value\' => $_POST[\'query\'],
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'some_meta_value2\',
\'value\' => $_POST[\'query\'],
\'compare\' => \'LIKE\',
),
)
])
但每当我使用tax_quey
, 它不工作,例如:new WP_Query([
\'post_status\' => \'publish\',
\'post_type\' => "some_custom_post_type",
\'orderby\' => \'DATE\',
\'order\' => \'DESC\',
\'facetwp\' => true,
\'posts_per_page\' => 15,
\'paged\' => $paged,
\'tax_query\' => [[
\'taxonomy\' => \'some_taxonomy\',
\'terms\' => [\'some_terms_slug\'],
\'field\' => \'slug\',
\'operator\' => \'IN\',
]],
\'_meta_or_title\'=> $_POST[\'query\'],
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'some_meta_value1\',
\'value\' => $_POST[\'query\'],
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'some_meta_value2\',
\'value\' => $_POST[\'query\'],
\'compare\' => \'LIKE\',
),
)
])
元查询修改器代码add_action( \'pre_get_posts\', function( $q )
{
if( $title = $q->get( \'_meta_or_title\' ) )
{
add_filter( \'get_meta_sql\', function( $sql ) use ( $title )
{
global $wpdb;
// Only run once:
static $nr = 0;
if( 0 != $nr++ ) return $sql;
// Modified WHERE
$sql[\'where\'] = sprintf(
" AND ( %s OR %s ) ",
$wpdb->prepare( "{$wpdb->posts}.post_title like \'%%%s%%\'", $title),
mb_substr( $sql[\'where\'], 5, mb_strlen( $sql[\'where\'] ) )
);
return $sql;
});
}
});
我需要过滤掉数据的元数据或标题,有什么建议吗?提前感谢