Ok, j'ai résolu le problème.
Le problème est que la requête post n'inclut pas la table postmeta, donc je l'ai ajoutée sur le custom_join
fonction, comme ceci :
add_filter('posts_join','custom_join');
add_filter('posts_orderby','custom_orderby');
function custom_join($join){
global $wpdb;
$customTable = $wpdb->prefix."custom_table";
if(!is_admin){
$join .= "LEFT JOIN $wpdb->postmeta p1 ON $wpdb->posts.ID = p1.post_id";
$join .= "LEFT JOIN $customTable p2 ON p1.meta_value = p2.slug";
}
return $join;
}
function custom_orderby($orderby_statement){
global $wpdb;
if(!is_admin){
$orderby_statement = "p2.price DESC, $wpdb->posts.post_date DESC";
}
return $orderby_statement;
}
J'ai ajouté aussi le posts_groupby
filtrer car la nouvelle requête m'a donné des publications en double (beaucoup de publications en double).
Voici le code :
add_filter('posts_groupby','custom_groupby');
function custom_groupby($groupby){
global $wpdb;
if(!is_admin){
$groupby = "$wpdb->posts.ID";
}
return $groupby;
}
Tout est écrit dans le fichier du plugin, mais vous pouvez aussi écrire dans le function.php
fichier de votre thème.
N'oubliez pas d'inclure le if(!is_admin)
déclaration si vous voulez voir la requête personnalisée uniquement sur le devant.