Bonjour à tous

Tout d'abord, je ne cache que ce message est du cross posting... il est déjà ici http://www.wordpress-fr.net/support/edit.php?id=243916 , mais le problème étant un peu délicat, je pense qu'il peut être nécessaire d'avoir des cerveaux différents

Je cherche à pouvoir sélectionner des articles appartenant à PLUSIEURS catégories (j'utilise donc la fonction category__and, très pratique). Pour cela, il suffit de cocher des cases, voir la page suivante : http://raudin.u-bordeaux3.fr/index-.php?cat=55

A droite, des cases à cocher selon diverses catégories ; à gauche, je fais afficher une partie de ce qui est renvoyé par le PHP de la fonctionnalité Ajax, à savoir les catégories cochées (55 est tjs vrai, c'est normal).

Mon problème est le suivant :

Lorsque je clique sur les différentes cases, ça ne fonctionne pas ! Je n'obtiens pas les articles de telles et telles catégories, mais TOUS les articles de la catégorie 55. Il y a bien des articles appartenant à plusieurs catégories, aucun souci là-dessus. Un bon test consiste à tout cocher : il n'y a aucun article qui devrait apparaître (aucun ne peut être dans toutes les catégories), et ils apparaissent tous...

Voici le code présent dans le fichier appelé par le Javascript :

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
<?php
require('./wp-config.php');
$wp->init();
$wp->parse_request();
$wp->query_posts();
$wp->register_globals();
 
if(isset($_POST["valeurs_recherches"])) {
 
	$var = '55,'.$_POST["valeurs_recherches"];
	echo $var;
 
	query_posts(array('category__and' => array($var)));
 
	if ( have_posts('') ) while ( have_posts() ) : the_post();
 
 
 
	?>
 
		<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 
			<h1 class="entry-title"><?php the_title(); ?></h1>
			<div class="entry-content">
				<?php the_content(); ?>
				<?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
				<?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
			</div><!-- .entry-content -->
		</div><!-- #post-## -->
 
	<?php endwhile; 
 
}
?>
Le code Javascript :

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
47
48
49
50
51
52
53
54
55
56
<script type="text/javascript">
function getXhr() {
	var xhr = null; 
	if(window.XMLHttpRequest) { // Firefox et autres
		xhr = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // Internet Explorer 
	    try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
	}
	else { // XMLHttpRequest non supporte par le navigateur 
	   alert("Conflit : navigateur ne supporte pas les objets XMLHTTPRequest"); 
	   xhr = false; 
	}
	return xhr;
}
 
// Fonction a faire au clic sur les cases a cocher
function rechAv() {
	var xhr = getXhr();
	// On definit ce qu'on va faire quand on aura la reponse
	xhr.onreadystatechange = function() {
		// On ne fait quelque chose que si on a tout recu et que le serveur est ok
		if(xhr.readyState == 4 && xhr.status == 200) {
			leselect = xhr.responseText;
			// On se sert de innerHTML pour identifier les elements envoyes
			document.getElementById('resultatrechercheajax').innerHTML = leselect;
		}
	}
 
	// POST (envoi des donnees)
	xhr.open("POST","ajax-categorie.php",true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 
	// Recuperation valeur checkbox
	var criteres_recherche = new Array();
 
	var formulaire = document.formulaire;
	var nb = formulaire.elements['tri_recherche[]'].length;
	for (i = 0; i < nb; i ++) {
		if (formulaire.elements['tri_recherche[]'][i].checked) {
			sel = formulaire.elements['tri_recherche[]'][i].value;
			criteres_recherche.push(sel);
			//alert(sel);
		}
	}
	//Regroupe les resultats separes par des virgules
	criteres_recherche = criteres_recherche.join(",");
 
	//dpt = sel.options[sel.selectedIndex].value;
	dpt = criteres_recherche;
	xhr.send("valeurs_recherches="+dpt);
}
</script>
Le fichier PHP est bien appelé (la preuve avec le echo qui renvoie bien les cases cochées), mais la fonction category__and ne semble pas bien fonctionner... ! J'ai vérifié en test sur cette page, la fonction category__and fonctionne...

D'autre part, question subsidiaire : existe-t-il une URL pour les catégories avec des ET (à l'instar des "OU" qui s'écrirait index.php?cat=1,2,3) ?

Merci beaucoup si vous avez tout lu !!
Merci par avance pour vos réponses

PS : la partie HTML concernée au cas où :
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
<div id="resultatrechercheajax">
 
<?php 
// ==================== Les productions
 
if ( is_category('55') ) {
 
	query_posts('cat=55');
	#query_posts (array('category__and' => array(55,97)));
 
	if ( have_posts('') ) while ( have_posts() ) : the_post(); ?>
 
		<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 
			<h1 class="entry-title"><?php the_title(); ?></h1>
			<div class="entry-content">
				<?php the_content(); ?>
				<?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
				<?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
			</div><!-- .entry-content -->
		</div><!-- #post-## -->
 
<?php 
 
endwhile; }
 
?>
 
	</div> <!-- fin DIV resultatrechercheajax -->