web-dev-qa-db-fra.com

Retour aux résultats de recherche ajax à partir d'une page

J'ai un formulaire pour un client dans lequel vous pouvez sélectionner différents champs, ce qui permet d'effectuer une recherche AJAX et de renvoyer les résultats pour un type d'article personnalisé.

Désormais, ce que le client souhaite, c’est d’avoir un bouton "Retour aux résultats de la recherche" lorsqu’il clique sur le résultat unique (certain CPT).

Mon idée était d’attacher un paramètre de requête sur l’url du permalien de chaque résultat qui contiendrait json des arguments de requête, quelque chose comme:

<a href="' . get_permalink() . '"?query_string=' . wp_json_encode( $args ) . '>Find out more<a>

Je pouvais alors lire le paramètre de requête et le transmettre sur la page de type de publication personnalisée au lien précédent, qui sera à nouveau passé en tant que paramètre de requête une fois que l'utilisateur aura cliqué dessus. De cette façon, je peux vérifier si un tel paramètre existe, et en fonction de celui-ci, analyser et exécuter la requête que je fais habituellement sur ma recherche ajax.

Cela a l'air correct, mais il faudrait encoder le tableau analysé, et il pourrait y avoir beaucoup de problèmes avec ce dernier (par exemple, le passer comme wp_json_encode ne fonctionne pas, j'ai probablement besoin d'utiliser htmlentities ou quelque chose comme ça. ).

Je pensais stocker temporairement le tableau d'arguments dans le transitoire, mais ce n'est pas bon, car si quelqu'un d'autre faisait une autre recherche alors que la première personne était sur la seule page? Cela changerait les résultats et ne fonctionnerait finalement pas.

J'ai également ajouté cette requête à l'objet de réponse dans mon ajax, mais cela n'est valable que sur la page de résultats. Existe-t-il un moyen de localiser cet objet temporairement, ou cette chaîne de requête, de manière à ce qu'il persiste sur la page suivante?

Toutes les idées sont les bienvenues.

MODIFIER

Le json des arguments de la requête est

{  
"post_type":"adverts",
   "tax_query":{  
      "relation":"AND",
      "0":{  
         "taxonomy":"advert_industry_category",
         "field":"term_id",
         "terms":1560,
         "operator":"IN"
      },
      "1":{  
         "taxonomy":"advert_location_category",
         "field":"slug",
         "terms":"england",
         "operator":"IN"
      },
      "2":{  
         "taxonomy":"advert_facilities_category",
         "field":"name",
         "terms":[  
            "Car parking"
         ],
         "operator":"IN"
      }
   },
   "meta_key":"advert_company_rating",
   "meta_value":"4"
}
1
dingo_d

J'ai résolu ceci en utilisant HistoryAPI.

Puisque mon ajax retourne des objets qui ont response, html et query, j'ai poussé les résultats HTML de la recherche à l'état d'historique avec

window.history.pushState( date_out.html, null, null);

data_out est l'objet renvoyé par l'appel ajax.

Ensuite, j'ai ajouté un bouton sur la page d'annonce unique qui fera

window.history.back();

sur clic. Cela m'enverra à la page de résultats de recherche. Ensuite, je peux vérifier l'URL de la page de recherche (cela peut être codé en dur ou extrait de l'objet de localisation où il est défini avec WordPress), et s'il y a quelque chose dans le history.state qui correspond à la recherche html, je le place juste après le div souhaité .

Ensuite, à l'intérieur de cette vérification, j'appuie également l'état vide dans l'historique, juste pour m'assurer que lorsque vous accédez à une autre page et appuyez sur Piste arrière, vous ne verrez aucun résultat de recherche.

Semble bien fonctionner :)

1
dingo_d