Étiqueté : ,

2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #49018
    ilan
    Participant
    Points: 29 pts
    Membre 2 étoiles

    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 🙂

    depanagewp
    #49022
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    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 En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
2 sujets de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.