Agregue un campo personalizado a los productos de Woocommerce para una categoría de producto específica

2 minutos de lectura

avatar de usuario
paudún

Estoy tratando de agregar un campo personalizado a la página de un solo producto para productos en una categoría específica. Estoy teniendo problemas con la lógica condicional aunque. Esto es lo que tengo hasta ahora:

function cfwc_create_custom_field() {

global $product;
$terms = get_the_terms( $product->get_id(), 'product_cat' );

if (in_array("tau-ende", $terms)) {
    $args = array(
    'id' => 'custom_text_field_title',
    'label' => __( 'Custom Text Field Title', 'cfwc' ),
    'class' => 'cfwc-custom-field',
    'desc_tip' => true,
    'description' => __( 'Enter the title of your custom text field.', 'ctwc' ),);
    woocommerce_wp_text_input( $args );
    }}

La función funciona, pero no la instrucción if. ¿Alguien tiene una idea de lo que estoy haciendo mal?

avatar de usuario
LoicTheAztec

Intente lo siguiente en su lugar, usando un bucle foreach iterando a través de objetos de término:

function cfwc_create_custom_field() {
    global $product;

    $terms = get_the_terms( $product->get_id(), 'product_cat' );

    // Loop through term objects
    foreach( $terms as $term ) {
        if ( "tau-ende" === $term->slug ) {
            woocommerce_wp_text_input( array(
                'id' => 'custom_text_field_title',
                'label' => __( 'Custom Text Field Title', 'cfwc' ),
                'class' => 'cfwc-custom-field',
                'desc_tip' => true,
                'description' => __( 'Enter the title of your custom text field.', 'ctwc' ),
            ) );
            break; // The term match, we stop the loop.
        }
    }
}

Cuando un término coincide, detenemos el ciclo para tener solo un campo personalizado… Debería funcionar ahora.

get_the_terms(id, taxonomy)

Esta función devuelve una matriz de WP_Term objetos y no cadenas de nombres de los términos. De ahí la condición if, que utiliza in_array función.

Si desea verificar si el nombre de pila está en los términos, probablemente pueda hacerlo así:

$cond = false;
foreach($terms as $term) {
    if ($term->slug == "tau-ende"){ // You can also match using $term->name
        $cond = true;
    }
}

¿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