Olá pessoal, esse dias atrás eu estava utilizando o sistema de ordenação de produtos do próprio WooCommerce, mas eu tinha á necessidade de adicionar a ordenação alfabética ASC e DESC (A-Z / Z-A) mas como não é padrão do WooCommerce então eu tive que aplicar alguns filtros, para que funcionasse corretamente.

Como vocês podem ver na imagem abaixo, não existe a opção de ordernação alfabética:

Screen Shot 2015-04-14 at 11.12.00 AM

De inicio para esse tutorial, vamos criar esses dois novos filtros “title_asc e title_desc”

<?php
// Custom sorting options
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ('title_asc' == $orderby_value) {
$args['orderby'] = 'title';
$args['order'] = 'ASC';
$args['meta_key'] = '';
}elseif ('title_desc' == $orderby_value) {
$args['orderby'] = 'title';
$args['order'] = 'DESC';
$args['meta_key'] = '';
}
return $args;
}
view raw function.php hosted with ❤ by GitHub

Vocês podem ver que eu declarei um valor chamado “title_asc”… Porque, eu apliquei esse nome no meu valor???

Como o próprio nome já diz, ele vai filtrar o nome dos produtos (orderby = title) e depois que ele vai aplicar a ordenação ascendente “A?Z” (order = ASC).

Agora que a ordernação ASC foi declarada é só replicar a mesma para descendente “Z?A” (order = DESC)… A única diferença além do nome do valor “title_desc” é que agora em order é DESC.

Após de criarmos a função o nosso select de ainda não vai recuperar esses novos filtros, para que os novos valores sejam aplicados, vamos ter que adicionar mais alguns filtros.

Agora vamos ter que aplicar uma function nos hooks do próprio WooCommerce que são “woocommerce_catalog_orderby e o woocommerce_default_catalog_orderby_options”:

<?php
// Adding a hook callback.
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['title_asc'] = __('Alphabetical - (A - Z)', 'your-theme');
$sortby['title_desc'] = __('Alphabetical - (Z - A)', 'your-theme');
return $sortby;
}
view raw function.php hosted with ❤ by GitHub

Como vocês viram acima eu adicionei um filter para os hooks falando que agora eles vão receber os meus valores personalizados “title_asc | title_desc”.

Eu aplique os nomes “Alphabetical – (A – Z) e Alphabetical – (Z – A)”  e os mesmos estão em inglês… Mas isso fica do seu critério, se o seu tema tiver suporte multilingue “textdomain” é só traduzir os mesmo no seu arquivo de tradução do seu tema.

Agora já podemos ver que os nossos filtros já estão aplicados e funcioando perfeitamente:

Screen Shot 2015-04-14 at 11.40.58 AM

Eu vou dar um bônus nesse tutorial, mostrando como excluir alguns filtros que vocês não queiram que sejam listados.

Primeiro vocês teram que clicar com o botão direito do mouse sobre um valor do selectinspecionar elemento:

Screen Shot 2015-04-14 at 11.57.06 AM

Vocês vão ter que pegar os values dos filtros, que vocês desejam excluir da listagem.

Nesse exemplo abaixo eu vou aplicar essa function nos seguintes valores “popularity, rating, price e price-desc” deixando somente os valores “menu_order, title_asc e title_desc”.

<?php
// Remove Options
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_remove_filter' );
function custom_woocommerce_remove_filter( $catalog_orderby ) {
unset( $catalog_orderby['popularity'] );
unset( $catalog_orderby['rating'] );
unset( $catalog_orderby['price'] );
unset( $catalog_orderby['price-desc'] );
return $catalog_orderby;
}
view raw function.php hosted with ❤ by GitHub

E por fim nosso select ficará assim, no seu frontend:

Screen Shot 2015-04-14 at 12.03.51 PM

Espero que vocês tenham gostado desse tutorial e até breve… Por favor, se você gostou deixe seu like e também compartilha.

Até Mais,

César Ribeiro
Written by

Hi, my name’s Cesar H. Ribeiro, I’m Brazilian and I live in São Paulo country town. I’ve been working with Web Development since 2006, I’m Web Developer Freelancer, my main specialty is deploying custom Web Sites using the WordPress platform with base, transforming PSD/Layouts for Custom Themes. In feel years with Developer Freelancer, I worked with many agencies around the world like: Brazil, Australia, USA, Germany and Austria.

Related Posts