Obtenga todas las clases de envío en Woocommerce 3

3 minutos de lectura

avatar de usuario
mike.bronner

No he podido descifrar esta nuez, pero no puedo evitar sentir que me estoy perdiendo algo simple.

Estoy desarrollando un complemento de WooCommerce que debería proporcionar una lista de clases de envío en su página de configuración de administración. El siguiente código, como se sugiere en la respuesta de otra pregunta, indica que lo siguiente debería funcionar:

$shipping           = new \WC_Shipping();
$shipping_classes   = $shipping->get_shipping_classes();
var_dump($shipping_classes);
die();

Desafortunadamente, la salida es una matriz vacía.

Estoy usando WordPress 4.9.5 y WooCommerce 3.3.5. ¡Gracias por cualquier ayuda!

ACTUALIZAR
Tengo exactamente el mismo problema que se describe aquí: get_terms() devuelve una taxonomía no válida y he proporcionado una solución alternativa. Sin embargo, no creo que sea una solución.

  • ¿Está tratando de obtener todas las clases de envío o los métodos de envío? Además, ¿ha intentado eliminar la barra inclinada delante de WC_Shipping();?

    – Fritas

    15 de abril de 2018 a las 17:42

avatar de usuario
LoicTheAztec

Para obtener todas las clases de envío solo necesitas lo siguiente:

$shipping_classes = get_terms( array('taxonomy' => 'product_shipping_class', 'hide_empty' => false ) );

Probado y funciona. Esto le dará una matriz de los WP_Term objetos de todas las clases de envío.

En Woocommerce las clases de envío están bajo product_shipping_class taxonomía personalizada.


O puede usar esta función personalizada con una simple consulta SQL:

function wc_get_shipping_classes(){
    global $wpdb;
    $return $wpdb->get_results( "
        SELECT * FROM {$wpdb->prefix}terms as t
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON t.term_id = tt.term_id
        WHERE tt.taxonomy LIKE 'product_shipping_class'
    " );
}

El código va en el archivo function.php de su tema secundario activo (o tema activo).

USO (ejemplo de prueba):

$shipping_classes = wc_get_shipping_classes(); // Get Shipping Classes
echo '<pre>'; print_r($shipping_classes); echo '</pre>'; // Test raw output   

  • Esto en realidad no funciona en mi caso. He intentado esto y solo devuelve una sola clase de envío por alguna razón, no todas. Agregué un enlace en la pregunta original a otra pregunta que encontré que plantea con mayor precisión el problema exacto. También proporcioné una solución alternativa allí, pero no creo que fuera una solución adecuada.

    – mike.bronner

    16 de abril de 2018 a las 16:25


  • @ mike.bronner Muy extraño porque todas las clases de envío son términos de la taxonomía personalizada “product_shipping_class” en Woocommerce. Asi que He actualizado mi respuesta, agregando una segunda forma.… Intentalo.

    – LoicTheAztec

    16 de abril de 2018 a las 16:46


  • Gracias por hacer el esfuerzo. 🙂 Estoy feliz de recorrer los resultados de get_terms() (sin ningún argumento) y filtrando mis resultados. Estoy bastante seguro de que hay un error o conflicto en alguna parte que está causando estragos. 😐

    – mike.bronner

    17 de abril de 2018 a las 0:09


Tal vez alguien todavía está buscando una solución 🙂

$WC_Shipping = new WC_Shipping();
$shipping_classes = $WC_Shipping->get_shipping_classes();
var_dump($shipping_classes);

avatar de usuario
Daniel Morell

Esto es realmente muy fácil…

/** 
 * @var WP_Terms[] $shipping_classes
 */
$shipping_classes = WC()->shipping()->get_shipping_classes();

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad