Добавить настраиваемое поле для продуктов Woocommerce для определенной категории продуктов - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь добавить настраиваемое поле на страницу отдельного товара для товаров в определенной категории.У меня проблемы с условной логикой.Это то, что я до сих пор получил:

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 );
    }}

Функция работает, но не оператор if.У кого-нибудь есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вместо этого попробуйте следующее, используя цикл foreach, выполняющий итерации по объектам термов:

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.
        }
    }
}

Когда термин совпадает, мы останавливаем цикл, чтобы иметь только одно настраиваемое поле ... Теперь это должно работать.

0 голосов
/ 20 февраля 2019
get_the_terms(id, taxonomy)

Эта функция возвращает массив WP_Term объектов, а не строковые имена терминов.Отсюда условие if, которое использует функцию in_array.

Если вы хотите проверить, соответствует ли данное имя терминам, вы, вероятно, можете сделать это следующим образом -

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