• 10-02-2022, 00:11:52
    #1
    Bir yerde takıldım. Woocommerce arama formunda Niteliklerin içindeki markayı aradıklarında çıkaramıyrum. Ürünün adı "Paslanmaz Tava" marka yazmıyor başlıkta ve içerikte fakat niteliklere marka Tefal diye tanımladım. Aramaya tefal yazınca malesef bir türlü aktif edemedim. bir kaç eklenti denedim örnek "WooCommerce Product Search" gibi ama netice alamdım. hiç tecrübe eden oldumu? yada tavsiyeniz nedir?
  • 16-02-2022, 21:42:16
    #2
    selamlar,
    bu işinizi görecektir.

    add_filter( 'posts_search', 'nitelikleri_ara');
    function nitelikleri_ara( $search, $query ) {
        global $wpdb, $wp;
    
        $qvars = $wp->query_vars;
        if ( is_admin() || empty($search) ||  ! ( isset($qvars['s']) && ! empty($qvars['s']) ) ) {
    
            return $search;
        }
        
        // Aramaya dahil etmek istediğiniz taksonomiyi burada listeleyin
        $taxonomy = 'pa_marka'; 
        
        /*
        birden fazla taksonomiyi aramaya dahil etmek isterseniz buradaki yorum satırlarını silin
    
        // Aramaya dahil etmek istediğiniz taksonomileri burada listeleyin
        $taxonomies = array('pa_marka', 'pa_nitelik', 'pa_nitelik2');
    
        $tax_query  = array('relation' => 'OR');
        
        foreach( $taxonomies as $taxonomy ) {
            $tax_query[] = array(
                'taxonomy' => $taxonomy,
                'field'    => 'name',
                'terms'    => esc_attr($qvars['s']),
            );
        }
    
    */
    
        // taksonomiyle ilişkilendirilmiş ürünleri alalım
        $ids = get_posts( array(
            'posts_per_page'  => -1,
            'post_type'       => 'product',
            'post_status'     => 'publish',
            'fields'          => 'ids',
            'tax_query'       => array( array(
                'taxonomy' => $taxonomy,
                'field'    => 'name',
                'terms'    => esc_attr($qvars['s']),
            )),
        ));
    
        if ( count( $ids ) > 0 ) {
            $search = str_replace( 'AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $ids ) . ")) OR (", $search);
        }
        return $search;
    }
  • 13-03-2022, 00:32:05
    #3
    koronadan dolayı deneyemedim ama deneyince hemen sonucu paylaşacağım. çok tşk edrim ilgi ve alakan için sana minnettarım.


    d3nnis adlı üyeden alıntı: mesajı görüntüle
    selamlar,
    bu işinizi görecektir.

    add_filter( 'posts_search', 'nitelikleri_ara');
    function nitelikleri_ara( $search, $query ) {
        global $wpdb, $wp;
    
        $qvars = $wp->query_vars;
        if ( is_admin() || empty($search) ||  ! ( isset($qvars['s']) && ! empty($qvars['s']) ) ) {
    
            return $search;
        }
        
        // Aramaya dahil etmek istediğiniz taksonomiyi burada listeleyin
        $taxonomy = 'pa_marka';
        
        /*
        birden fazla taksonomiyi aramaya dahil etmek isterseniz buradaki yorum satırlarını silin
    
        // Aramaya dahil etmek istediğiniz taksonomileri burada listeleyin
        $taxonomies = array('pa_marka', 'pa_nitelik', 'pa_nitelik2');
    
        $tax_query  = array('relation' => 'OR');
        
        foreach( $taxonomies as $taxonomy ) {
            $tax_query[] = array(
                'taxonomy' => $taxonomy,
                'field'    => 'name',
                'terms'    => esc_attr($qvars['s']),
            );
        }
    
    */
    
        // taksonomiyle ilişkilendirilmiş ürünleri alalım
        $ids = get_posts( array(
            'posts_per_page'  => -1,
            'post_type'       => 'product',
            'post_status'     => 'publish',
            'fields'          => 'ids',
            'tax_query'       => array( array(
                'taxonomy' => $taxonomy,
                'field'    => 'name',
                'terms'    => esc_attr($qvars['s']),
            )),
        ));
    
        if ( count( $ids ) > 0 ) {
            $search = str_replace( 'AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $ids ) . ")) OR (", $search);
        }
        return $search;
    }