WooCommerce отображает описание переменной после переменной цены

Я пытаюсь отобразить описание переменной на странице продукта woocommerce. Я установил плагин с именем woocommerce radio buttons, для отображения моих переменных продуктов и цен в виде переключателя вместо выбора.

Я редактирую файл variable.php в этом плагине (затем я перенесу его в свою дочернюю тему после завершения), и в основном мне нужно показать описание переменной в метке в виде переменной с именем $ variable_description.

    printf( '<div>
    <input type="radio" name="%1$s" value="%2$s" id="%3$s" %4$s>
    <label for="%3$s">%5$s</label>
    <label>'.$variable_description.'</label>
    </div>', $input_name, $esc_value, $id, $checked, $filtered_label );

Я не могу восстановить эти данные из базы данных из-за непонятной мне структуры базы данных.

Знаете ли вы какой-либо шорткод или функцию для его восстановления и отображения описания переменной для каждой переменной цены?

В функции, которую я редактирую, цена правильно отображается для каждого варианта рядом с переключателем в качестве первой метки. Полный код функции:

if ( ! function_exists( 'print_attribute_radio' ) ) {
    function print_attribute_radio( $checked_value, $value, $label, $name, $product_id ) {

        // This handles < 2.4.0 bw compatibility where text attributes were not sanitized.
        $checked = sanitize_title( $checked_value ) === $checked_value ? checked( $checked_value, sanitize_title( $value ), false ) : checked( $checked_value, $value, false );

        $input_name = 'attribute_' . esc_attr( $name ) ;
        $esc_value = esc_attr( $value );
        $id = esc_attr( $name . '_v_' . $value );
        $filtered_label = apply_filters( 'woocommerce_variation_option_name', $label );

    //here is where I try to recover the variable_description

        global $wpdb;
        $post_id = $product_id + 3;

         $querystr = "SELECT wpostmeta.meta_value
                    FROM $wpdb->postmeta wpostmeta
                    WHERE wpostmeta.post_id = '$post_id'
                    AND wpostmeta.meta_key = '_variation_description'
                    ORDER BY wpostmeta.meta_value DESC
                    "; 


     $variable_description = $wpdb->get_var($querystr);

        printf( '<div>
        <input type="radio" name="%1$s" value="%2$s" id="%3$s" %4$s>
        <label for="%3$s">%5$s</label>
        <label>'.$variable_description.'</label>
        </div>', $input_name, $esc_value, $id, $checked, $filtered_label );

    }
}

Спасибо


person Ame    schedule 07.12.2016    source источник


Ответы (1)


Чтобы получить метаданные публикации, вы можете использовать WordPress get_post_meta() функция вместо этого (это намного короче и доступнее).

Итак, ваш код должен быть теперь:

if ( ! function_exists( 'print_attribute_radio' ) ) {
    function print_attribute_radio( $checked_value, $value, $label, $name, $product_id ) {

        // This handles < 2.4.0 bw compatibility where text attributes were not sanitized.
        $checked = sanitize_title( $checked_value ) === $checked_value ? checked( $checked_value, sanitize_title( $value ), false ) : checked( $checked_value, $value, false );

        $input_name = 'attribute_' . esc_attr( $name ) ;
        $esc_value = esc_attr( $value );
        $id = esc_attr( $name . '_v_' . $value );
        $filtered_label = apply_filters( 'woocommerce_variation_option_name', $label );

        // HERE the product variation description
        $variation_id = $product_id + 3;
        $variable_description = get_post_meta( $variation_id, '_variation_description', true );

        printf( '<div>
        <input type="radio" name="%1$s" value="%2$s" id="%3$s" %4$s>
        <label for="%3$s">%5$s</label>
        <label>'.$variable_description.'</label>
        </div>', $input_name, $esc_value, $id, $checked, $filtered_label );
    }
}
person LoicTheAztec    schedule 07.12.2016