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), если это будет решено из-за конфиденциальности клиента и т. Д.