Accueil Forums Support communautaire WooCommerce Tri woocommerce sur requête SQL custom

Mots-clés : ,

Ce sujet a 1 réponse, 2 participants et a été mis à jour par  Mathieu, il y a 1 semaine et 2 jours.

2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #49018

    ilan
    Participant

    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 🙂

    • Ce sujet a été modifié le il y a 1 semaine et 2 jours par  ilan.
    • Ce sujet a été modifié le il y a 1 semaine et 2 jours par  ilan.
    • Ce sujet a été modifié le il y a 1 semaine et 2 jours par  Mathieu.
    #49022

    Mathieu
    Modérateur

    Le 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

2 sujets de 1 à 2 (sur un total de 2)

Vous devez être connecté pour répondre à ce sujet.