-
-
Save davidwilliamdacosta/3a2fce4c69f227d3a195ad3d6c24f10c to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Order product collections by stock status, instock products first. | |
*/ | |
class iWC_Orderby_Stock_Status | |
{ | |
public function __construct() | |
{ | |
// Check if WooCommerce is active | |
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) { | |
add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000); | |
} | |
} | |
public function order_by_stock_status($posts_clauses) | |
{ | |
global $wpdb; | |
// only change query on WooCommerce loops | |
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) { | |
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) "; | |
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby']; | |
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where']; | |
} | |
return $posts_clauses; | |
} | |
} | |
new iWC_Orderby_Stock_Status; | |
?> |
Prezados, está funcionando nas versões atuais?
Grato.
@ChicoCybergoth.
Estou utilizando em WordPress 4.9.16 e Woocommerce 3.3.3. Sem problemas até o momento.
Bom dia, está sim.
Show! Obrigado! @JonataBiazuz @agenciadw
Boa (Y), funciona, obrigado
Estou utilizando o WordPress 5.6.2 e Woocommerce 4.8.0, além de estar utilizando o DIVI. Percebi que ao adicionar este código os estilos CSS da página da loja somem. Gostaria de saber o que pode ser ou como arrumar isso. Grato
Olá. Como faço para aplicar este código nas páginas de atributo?
Estou montando um e-commerce e na slug ...marca/coca-cola/ o filtro não está sendo aplicado. Apenas no .../loja/
Neste caso o atributo é marca
Alguém consegue me ajudar?
Boa (Y), funciona, obrigado
Olá @DavidsonVeniali tudo bem? Você tem que aplicar ele no function, recomendo que use sempre um child para fazer aplicações no template e não correr o risco de perder as atualizações.
Sobre quebrar o CSS não era para acontecer isto, teria que analizar mais a fundo.
Olá. Como faço para aplicar este código nas páginas de atributo?
Estou montando um e-commerce e na slug ...marca/coca-cola/ o filtro não está sendo aplicado. Apenas no .../loja/
Neste caso o atributo é marca
Alguém consegue me ajudar?
@LucasBecker19 tudo bem? Não testei ele nos filtros, mas na teoria era para aplicar em todos.
Olá. Como faço para aplicar este código nas páginas de atributo?
Estou montando um e-commerce e na slug ...marca/coca-cola/ o filtro não está sendo aplicado. Apenas no .../loja/
Neste caso o atributo é marca
Alguém consegue me ajudar?@LucasBecker19 tudo bem? Não testei ele nos filtros, mas na teoria era para aplicar em todos.
Perdão, eu acho que expliquei errado. Não quis dizer filtro, eu quis dizer ordenação.
Esta ordenação só esta sendo aplicada no /loja/ porém não está sendo aplicado nas marcas
Mas obrigado amigo!
Olá. Como faço para aplicar este código nas páginas de atributo?
Estou montando um e-commerce e na slug ...marca/coca-cola/ o filtro não está sendo aplicado. Apenas no .../loja/
Neste caso o atributo é marca
Alguém consegue me ajudar?@LucasBecker19 tudo bem? Não testei ele nos filtros, mas na teoria era para aplicar em todos.
Perdão, eu acho que expliquei errado. Não quis dizer filtro, eu quis dizer ordenação.
Esta ordenação só esta sendo aplicada no /loja/ porém não está sendo aplicado nas marcasMas obrigado amigo!
Entendi, vou testar aqui e depois dou um parecer.
Fala galera!
Tem um vídeo completo, bem rápido, explicando como inserir esse snipet no functions.php do Wordpress.
https://www.youtube.com/watch?v=IXb6S3KySQc&t=9s&pp=sAQA
Vale a pena assistir!!
Fala galera!
Tem um vídeo completo, bem rápido, explicando como inserir esse snipet no functions.php do Wordpress.https://www.youtube.com/watch?v=IXb6S3KySQc&t=9s&pp=sAQA
Vale a pena assistir!!
Muito obrigado
David. Bom dia! na loja ficou perfeito! Estamos precisando além da loja, fazer essa mesma lógica em uma lista de produtos que fica posicionada na home. Na home foi utilizado o mesmo widget de "products" utilizado na loja, sabe nos direcionar de alguma maneira para implantar essa lógica também na lista de produtos da home?
Desde já, parabenizo o trabalho, muito bom.
Ola tudo bem ?
Existe algum codigo que esconda esse item da loja?
Funcionou show! Obrigado David!
Mais uma pergunta cara, eu percebi que além do frontend ele afetou o backend também, a lista de produtos também colocou os itens em falta no final, o que não tem muito problema mas eu estava acostumado com a listagem então me confundiu um pouco, teria como ele afetar somente o frontend?
David. Bom dia! na loja ficou perfeito! Estamos precisando além da loja, fazer essa mesma lógica em uma lista de produtos que fica posicionada na home. Na home foi utilizado o mesmo widget de "products" utilizado na loja, sabe nos direcionar de alguma maneira para implantar essa lógica também na lista de produtos da home?
Desde já, parabenizo o trabalho, muito bom.
Para a página inicial normalmente eu construo ela através do Elementor e defino por lá qual a ordem que vou colocar.
Ola tudo bem ?
Existe algum codigo que esconda esse item da loja?
No próprio Woocommerce. Você vai em Woocommerce > Produtos > Inventário e em Visibilidade dos produtos fora de estoque basta marcar Ocultar os produtos fora de estoque do catálogo
Funcionou show! Obrigado David!
Mais uma pergunta cara, eu percebi que além do frontend ele afetou o backend também, a lista de produtos também colocou os itens em falta no final, o que não tem muito problema mas eu estava acostumado com a listagem então me confundiu um pouco, teria como ele afetar somente o frontend?
Eu recomendo para isto usar o plugin Snippets, por ela você pode definir onde o código irá afetar.
Estou utilizando o WordPress 5.6.2 e Woocommerce 4.8.0, além de estar utilizando o DIVI. Percebi que ao adicionar este código os estilos CSS da página da loja somem. Gostaria de saber o que pode ser ou como arrumar isso. Grato
Você conseguiu resolver isso? Também utilizo o DIVI e aconteceu a mesma coisa comigo, o código remove todo o layout e deixa só a listagem de produtos...
Boa noite, estou com problemas em aplicar na pagina HOME, no restante do site funciona, mas na HOME não.
Alguém tem alguma ideia de como posso fazer?
Boa noite, estou com problemas em aplicar na pagina HOME, no restante do site funciona, mas na HOME não. Alguém tem alguma ideia de como posso fazer?
A homepage não se inclui na regra de páginas no código. Para acrescentar mude a seguinte linha de:
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
Para:
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_home())) {
Vale a pena lembrar que só funcionará se a lista de produtos estiver sendo gerada por um post_loop. Espero que resolva o seu problema :)
@vittorduartte obrigado pela resposta!
Funcionou show! Obrigado David!
Mais uma pergunta cara, eu percebi que além do frontend ele afetou o backend também, a lista de produtos também colocou os itens em falta no final, o que não tem muito problema mas eu estava acostumado com a listagem então me confundiu um pouco, teria como ele afetar somente o frontend?Eu recomendo para isto usar o plugin Snippets, por ela você pode definir onde o código irá afetar.
Grato pela resposta, mas você acha que teria alguma solução simples sem ter que instalar um plugin?
Funcionou show! Obrigado David!
Mais uma pergunta cara, eu percebi que além do frontend ele afetou o backend também, a lista de produtos também colocou os itens em falta no final, o que não tem muito problema mas eu estava acostumado com a listagem então me confundiu um pouco, teria como ele afetar somente o frontend?Eu recomendo para isto usar o plugin Snippets, por ela você pode definir onde o código irá afetar.
Grato pela resposta, mas você acha que teria alguma solução simples sem ter que instalar um plugin?
Sim, você pode usar o function do seu tema.
Funcionou show! Obrigado David!
Mais uma pergunta cara, eu percebi que além do frontend ele afetou o backend também, a lista de produtos também colocou os itens em falta no final, o que não tem muito problema mas eu estava acostumado com a listagem então me confundiu um pouco, teria como ele afetar somente o frontend?Eu recomendo para isto usar o plugin Snippets, por ela você pode definir onde o código irá afetar.
Grato pela resposta, mas você acha que teria alguma solução simples sem ter que instalar um plugin?
Sim, você pode usar o function do seu tema.
Sim amigo, eu estou usando, a questão é a que expliquei antes, a lista de produtos no frontend ficou de acordo com o efeito, com os produtos sem estoque no fim, a questão é que isso afetou a lista de produtos no backend também, não que seja MUITO problema mas estava acostumado com a sequência antiga, não é nada demais mas se pudesse ocorrer só front eu iria preferir, entende?
Obrigado pela atenção.
Notice: Trying to get property 'ID' of non-object in /home/u217584747/domains/tropicaldiversidades.com/public_html/wp-includes/class-wp-query.php on line 4186
Notice: Trying to get property 'post_title' of non-object in /home/u217584747/domains/tropicaldiversidades.com/public_html/wp-includes/class-wp-query.php on line 4188
Notice: Trying to get property 'post_name' of non-object in /home/u217584747/domains/tropicaldiversidades.com/public_html/wp-includes/class-wp-query.php on line 4190
Notice: Trying to get property 'post_type' of non-object in /home/u217584747/domains/tropicaldiversidades.com/public_html/wp-includes/class-wp-query.php on line 4338
Conseguem me auxiliar? Utilizei o snippet e está apresentando o erro acima na minha home. Inseri o código via Plugin Snippets PHP.
Tema atual: Woodmart Child (versão 1.0.0)
Obrigado.
Funcionou... mas tem como fazer funcionar também nos produtos relacionados da pagina descrição dos produtos?
Se você estiver usando widgets de catálogo de produtos, pode ser que não funcione (que foi o meu caso). A maneira que consegui foi indo ali na aba de produtos e filtrei para produtos fora de estoque, depois fui alterando as datas de postagem para serem as primeiras publicadas, exemplo: se seu produto foi publicado dia 15 em tal horário, altere a data do produto fora de estoque para o dia 14 em tal horário. Assim ele aparece como último no catálogo. Observação: no widget de catálogo, precisa está filtrado por data, se não, não irá funcionar. Espero ter ajudado!:)
Prezados, está funcionando nas versões atuais?
Grato.