Woocommerce многоязычная странная сортировка происходит

Если вы посмотрите на скрытую ссылку и щелкнете по одному из тегов слева, а затем выберите другой порядок сортировки справа, браузер будет перенаправлен на URL-адрес тега продукта, а не добавит сортировку и останется на Страница магазина.

Теперь у меня есть несколько "пользовательских" вариантов сортировки и "пользовательская" фильтрация по тегам товаров. Ниже вы найдете код этого.

Woocommerce functions

function jandje_woocommerce_catalog_orderby( $orderby ) {
        unset($orderby['popularity']);
        unset($orderby['rating']);
        unset($orderby['date']);
        unset($orderby['date-desc']);
        unset($orderby['price']);
        unset($orderby['price-desc']);
        return $orderby;
    }
    add_filter('woocommerce_catalog_orderby', 'jandje_woocommerce_catalog_orderby');

    function jandje_woocommerce_catalog_orderby_new_items($sort_args) {
        if(!$_GET['orderby']) {
            return $sort_args;
        }
        $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filter('woocommerce_default_catalog_orderby',  get_option('woocommerce_default_catalog_orderby'));
        if ('date' == $orderby_value) {
            $sort_args['orderby'] = 'date';
            $sort_args['order'] = 'asc';
            $sort_args['meta_key'] = '';
        }
        if('date-desc' == $orderby_value) {
            $sort_args['orderby'] = 'date';
            $sort_args['order'] = 'desc';
            $sort_args['meta_key'] = '';
        }
        if ('none' == $orderby_value) {
            $sort_args['orderby'] = '';
            $sort_args['order'] = '';
            $sort_args['meta_key'] = '';
        }
        return $sort_args;
    }
    add_filter('woocommerce_get_catalog_ordering_args', 'jandje_woocommerce_catalog_orderby_new_items');

    function jandje_woocommerce_catalog_orderby_custom($sortby) {
        $sortby[ 'none' ] = __('Standaard sortering', 'tschulten');
        $sortby[ 'date' ] = __('Datum: Oud - Nieuw', 'tschulten');
        $sortby[ 'date-desc' ] = __('Datum: Nieuw - Oud', 'tschulten');
        $sortby[ 'price'] = __('Prijs: Laag - Hoog', 'tschulten');
        $sortby[ 'price-desc' ] = __('Prijs: Hoog - Laag', 'tschulten');
        return $sortby;
    }
    add_filter('woocommerce_default_catalog_orderby_options', 'jandje_woocommerce_catalog_orderby_custom');
    add_filter('woocommerce_catalog_orderby', 'jandje_woocommerce_catalog_orderby_custom');

И тогда фильтр-tag.js

$(document).ready(function(){

var v = [], h;
var q = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < q.length; i++) {
    h = q[i].split('=');
    v.push(h[0]);
    v[h[0]] = h[1];
}
//  First we need to check if the user is using the website in a different language
if(v['lang']) {
    var lang = v['lang'];
} else {
    lang = null;
}

if(v['product_tag']) {
    var tag_class = v['product_tag'];
    $('li.'+tag_class).addClass('active');
}
var pathname = window.location.pathname;
// console.log(pathname);

$('a.product-tag').on('click', function(e){
    e.preventDefault();

    var vars = [], hash;
    var slug = $(this).data('slug');
    var query = window.location.href.slice(window.location.href.indexOf('?')).split('&');
    console.log(query);
    for(var i = 0; i < query.length; i++) {
        hash = query[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1]
    }


    // define language url
    if(lang != null) {
        var langurl = 'lang='+lang;
    } else {
        var langurl = '';
    }

    // check if the tag being clicked on isnt already active
    // if tag is active, remove active and filtering
    if($(this).parent('.product-tag').hasClass('active')) {

        if(vars['?orderby']) {
            if(langurl != '') {
                var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?orderby=' + vars['?orderby'] + '&'+langurl;
            } else {
                var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?orderby=' + vars['?orderby'];
            }
            window.location.assign(newUrl); 
        } else if(vars['?product_tag']) {
            if(langurl != '') {
                var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?'+langurl;
            } else {        
                var newUrl = window.location.protocol + '//' + window.location.host + pathname;
            }
            window.location.assign(newUrl);
        } else {
            if(langurl != '') {
                var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?'+langurl;
            } else {        
                var newUrl = window.location.protocol + '//' + window.location.host + pathname;
            }
            window.location.assign(newUrl);
        }
        return;
    }
    if(vars['?orderby']) {
        // hier wordt al gesorteerd via woocommerce orderby functie
        if(langurl != '') {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?orderby=' + vars['?orderby'] + '&product_tag='+slug + '&'+langurl;
        } else {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?orderby=' + vars['?orderby'] + '&product_tag='+slug;
        }
        window.location.assign(newUrl);

    } else if(vars['?product_tag']) {
        if(langurl != '') {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?product_tag='+slug + '&'+langurl;
        } else {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?product_tag='+slug;
        }
        console.log(newUrl);
        window.location.assign(newUrl);

    } else {
        if(langurl != '') {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?product_tag='+slug + '&'+langurl;
        } else {
            var newUrl = window.location.protocol + '//' + window.location.host + pathname + '?product_tag='+slug;
        }
        window.location.assign(newUrl);

    }
});

});

Странно то, что, если я использую нидерландский язык "голландский", все просто отлично работает. Если я использую другой язык (немецкий или английский) и сначала выбираю вариант сортировки, а затем выбираю тег, все работает нормально. Просто, если я сначала выберу тег, а затем выберу сортировку, он перейдет на страницу тега продукта, а не останется на странице магазина.

Я на 90% уверен, что это не проблема перевода. Кто-нибудь может указать мне правильное направление, пожалуйста?

PS. Я удалю это (по крайней мере, URL), если это будет решено из-за конфиденциальности клиента и т. Д.

0 ответов

Другие вопросы по тегам