TeeAlves Posted March 27, 2024 at 10:28 AM Report #632939 Posted March 27, 2024 at 10:28 AM Bom dia, Precisava da vossa preciosa ajuda, dado que já são alguns dias a tentar e não estou a conseguir chegar à conclusão pretendida 😄 Ora, basicamente temos uma loja online e gostaria de modificar a label por baixo do método de envio (hook: woocommerce_cart_shipping_method_full_label) baseado no estado de stock dos produtos existentes no carrinho. Basicamente, caso exista 1 produto que o estado de stock seja "por encomenda" então a label do método de envio 1 = "48/72h" e a label do método de envio 2 = "48/72h". Caso exista 1 produto que seja "stock limitado" então label do método de envio 1 = "24/48h" e a label do método de envio 2 = "48/72h". Caso contrário (isto é, todos os produtos estejam "em stock") a label = ""Envio até às 16h". A minha tentativa mais próxima deu nisto : (mas ele verifica em cada produto, ou seja, adiciona uma label tantas vezes quantas o número de produtos do carrinho) <?php add_filter( 'woocommerce_cart_item_name', 'custom_text_based_status_name', 10, 3 ); function custom_text_based_status_name( $item_name, $cart_item, $cart_item_key ) { if( ! ( is_checkout() ) ) return $item_name; $shipping_class_1 = 'onbackorder'; $shipping_class = $cart_item['data']->get_stock_status(); if( $shipping_class === $shipping_class_1 ) { add_filter( 'woocommerce_cart_shipping_method_full_label', 'custom_shipping_methods_label', 10, 2 ); function custom_shipping_methods_label( $label, $method ) { switch ( $method->id ) { case 'fish_n_ships:62': //Portugal Continental - Transportadora $txt = __('Expedição estimada: 24 a 48h úteis'); // <= Additional text break; case 'fish_n_ships:63': //Portugal Continental - Gratuito $txt = __('Expedição estimada: 72 a 96h úteis'); // <= Additional text break; default: //nos restantes casos $txt = __('Confirmaremos assim que possível'); // <= Additional text } return $label . '<br /><small style="color:#777777">' . $txt . '</small>'; } } return $item_name; } Já faz dias que ando de volta disto a tentar e sem solução à vista. Alguém pode ajudar? Obrigado 😃
Rui Carlos Posted March 29, 2024 at 12:39 PM Report #632949 Posted March 29, 2024 at 12:39 PM Não conheço o Woocommerce, mas parece-me um pouco estranho que tenhas um add_filter dentro de outro (e possivelmente é o que faz teres várias labels, pois é chamado para cada item). Assumo que o teu problema seja teres acesso ao valor de $shipping_class. Talvez consigas usar uma variável global? Isto não é uma boa prática, e penso que só funcionará se os hooks de woocommerce_cart_item_name forem executados antes do hooks de woocommerce_cart_shipping_method_full_label, mas podes tentar. Na tua solução actual, talvez consigas resolver o problema verificando o valor de $label (estou a assumir que os múltiplos valores estão a ser sucessivamente concatenados nessa variável, pelo que verificando se a variável já contém o conteúdo que pretendes, podes evitar duplicá-lo). Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now