-
-
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; | |
?> |
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!:)
Ola tudo bem ?
Existe algum codigo que esconda esse item da loja?