-
-
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; | |
?> |
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!:)
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?