Accueil › Forums › Support communautaire WooCommerce › Tri woocommerce sur requête SQL custom
Ce sujet a 1 réponse, 2 participants et a été mis à jour par Mathieu, il y a 3 mois et 1 semaine.
-
AuteurMessages
-
13 janvier 2018 à 3 h 31 min #49018
Bonjour,
Pour une première question j’espère ne pas vous assommer 🙂
Donc voila mon problème, j’ai une requête SQL dans un plugin custom qui me permet de trier mes produit suivant la distance de l’utilisateur, si le produit à une image etc…
Celle-ci fonctionne parfaitement et me retourne un Array d’id de produits, jusque la pas de souci…
voici la requête :if ($atts['is_category'] == 'yes' && (int)$atts['category_id']) { $arrayCategorie = array(); $arrayCategorie[] = (int)$atts['category_id']; $str_ArrayChild = implode(',',$arrayCategorie); $querystr = "SELECT productid as post_id,( 3959 * acos(cos(radians('%f')) * cos( radians(latitude))* cos( radians( longitude ) - radians('%f'))+ sin(radians('%f'))* sin( radians(latitude)))) AS distance, {$wpdb->postmeta}.meta_value FROM {$wpdb->geo_location} JOIN {$wpdb->term_relationships} ON {$wpdb->geo_location}.productid = {$wpdb->term_relationships}.object_id LEFT JOIN {$wpdb->postmeta} ON {$wpdb->geo_location}.productid = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_thumbnail_id' AND {$wpdb->postmeta}.meta_value != '' WHERE {$wpdb->term_relationships}.term_taxonomy_id IN ($str_ArrayChild) HAVING distance < '%d' ORDER BY distance, {$wpdb->postmeta}.meta_value DESC "; } else { $querystr = "SELECT productid as post_id,( 3959 * acos(cos(radians('%f')) * cos( radians(latitude))* cos( radians( longitude ) - radians('%f'))+ sin(radians('%f'))* sin( radians(latitude)))) AS distance FROM {$wpdb->geo_location} HAVING distance < '%d' ORDER BY distance "; } $querystr = sprintf($querystr, floatval($latitude), floatval($longitude), floatval($latitude), $distance);
Je passe le rest edu code car je fait encore un autre traitement dessus, qui élague un peu les produits. Le problème arrive maintenant, j’utilise le shortcode de woocommerce pour afficher mes produit :
if($productArray1 > 0) { // View list of product based on road distance of user position do_shortcode('[products ids="' . xxxx . '" per_page="8" columns="4" pagination="true"]'); }
Et la bien sur mais produit ne sont plus trié ! j’ai beau ajouter OrderBy=”” etc, rien ni fait je perds mon custom sorting…
Ma question, comment afficher mes produits dans le bon ordre sans passer par le shortcode ?
Merci pour vos lumières 🙂
13 janvier 2018 à 8 h 38 min #49022Le shortcode “products” est obligatoirement trié donc une autre solution serait de faire une boucle qui affiche chaque produit individuellement avec le shortcode “product”.
Développeur PHP et WordPress
Création d'extensions pour WordPress et Woocommerce
Personnalisation d'extensions existantes
En Alsace dans l'annuaire des prestataires WordPress et WooCommerce -
AuteurMessages
Vous devez être connecté pour répondre à ce sujet.