J'utilise WP_Query()
pour obtenir des publications en fonction de leur plage, par exemple:
$args = array(
'numberposts' => -1,
'post_type' => 'page',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'parameters',
'value' => 'width',
),
array(
'key' => 'value',
'value' => array( '22mm', '55mm' ), // Can this be done when I'm using NUMERIC and BETWEEN?
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
)
)
);
$the_query = new WP_Query( $args );
Dans la base de données, mes valeurs sont stockées sous forme de chaînes, c'est-à-dire 22mm , 55mm , etc. .
Comment puis-je dire à la requête de rechercher une plage et d'ignorer le mm dans 22mm ?
Intercepter la requête sur le filtre posts_where
. Vous pouvez y remplacer les valeurs non numériques:
preg_replace( "/[^0-9,.]/", "", $yourMeta );
Ou dans un code (générique):
add_action( 'posts_where', 'wpse120784WhereDiameter', 100 );
function wpse120784WhereDiameter( $where )
{
// If conditions here - only target the cases where we need it
# if ( foo ) { etc.
// Only run once for this single query
remove_filter( current_filter(), __FUNCTION__ );
$diameter = get_post_meta( ... );
$where .= preg_replace( "/[^0-9,.]/", $diameter, $where );
return $where;
}
Lorsque vous parvenez à cibler les diamètres en MM exacts que vous recherchez, l'appel Regex Search/Replace apparaîtra simplement dans la variable MM
/Inch
(quelle que soit l'unité existante).
Bien sûr, vous devez accéder aux valeurs post-méta (get_post_meta()
) pour les cibler plus précisément dans la tâche de remplacement de Regex, mais cela devrait vous amener à votre objectif.
Je pense toujours que supprimer le MM de vos entrées serait beaucoup plus facile et meilleur que ce que vous essayez d’atteindre.