Bonjour,

J'ai deux queries reunies en une. Tout cela fonctionne correctement. Le probleme est que cela charge tres lentement. Voila mon code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
<?php $geoip = geoip_detect2_get_info_from_current_ip(); $country = $geoip->country->name; get_header(); $cat = getCurrentCatID(); ?>
 
<?php $my_query2 = new WP_Query( array( 'meta_query' => array( 
'relation' => 'OR', 
array( 'relation' => 'AND', 
array( 'key' => 'allowed_country', 
'compare' => 'LIKE', 
'value' => $country, ), 
array( 'key' => 'restricted_country', 
'value' => false,
'type' => 'BOOLEAN', )), 
array( 'relation' => 'AND',
 array( 'key' => 'restricted_country', 
'value' => $country, 'compare' => 'NOT LIKE' ), 
array( 'key' => 'allowed_country',
'value' => false, 'type' => 'BOOLEAN', )),), 
'meta_key' => 'ratings_average', 'orderby' => 'post_date', 'posts_per_page' => '-1', 'order' => 'DESC', 'category__in' => array( $cat ),'fields' => 'ids') ); 
 
$my_query3 = new WP_Query( array( 'meta_query' => array(
'relation' => 'OR',
 array( 'relation' => 'AND',
 array( 'key' => 'allowed_country',
 'compare' => 'NOT LIKE',
 'value' => $country, ),
 array( 'key' => 'restricted_country',
 'value' => false, 'type' => 'BOOLEAN', )),
 array( 'relation' => 'AND',
 array( 'key' => 'restricted_country',
 'value' => $country,
 'compare' => 'LIKE'),
 array( 'key' => 'allowed_country',
 'value' => false, 'type' => 'BOOLEAN', )),),
 'meta_key' => 'ratings_average',
 'orderby' => 'post_date',
 'order' => 'DESC',
 'posts_per_page' => '-1',
 'category__in' => array( $cat ),
 'fields' => 'ids') );
 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$ids = array_merge($my_query2->posts, $my_query3->posts);
 
$my_query = new WP_Query(array('post__in' => $ids,'orderby' => 'post__in', 'paged' => $paged));  ?>
		<?php if ( have_posts() ) : ?>
etc...
En gros cela liste les posts admis dans le pays de l'utilisateur. Ces posts sont classés par note ( ratings_average ). Ensuite il liste les posts qui ne sont pas admis dans le pays de l'utilsateur. Ils sont aussi classé par note.

Le probleme est que ce code met un certain temps à charger. Je ne peux pas le mettre en cache car le classement des posts est différent en fonction du pays ou se trouve le visiteur.

D'autre part Wordpress ne me permets pas d'utiliser plus de 2 relation OR par new_query.

Si vous avez une solution pour mettre tout ca dans une query...

Merci pour votre aide.