как сохранить текстовые значения в wp_option wordpress

#wordpress #woocommerce

#wordpress #woocommerce

Вопрос:

Я пытаюсь создать функцию для woocommerce и хочу сохранить эти данные в моем wp_option.

 function custom_before_price() {
                $args = array(
                'id' => 'custom_before_price_table1',
                'label' => __( 'Before Price', 'cbp1' ),
                'class' => 'cbp-custom-field',
                'desc_tip' => true,
                'description' => __( 'Enter the text before price.', 'cbpdes' ),
                );
                   woocommerce_wp_text_input( $args );
               }

               add_action( 'woocommerce_product_options_general_product_data', 'custom_before_price' );
  

Ответ №1:

Вы должны использовать add_option().что-то вроде этого

 add_option( string $option, mixed $value = '', string $deprecated = '', string|bool $autoload = 'yes' )
  

Ответ №2:

 function custom_before_price() {

    $args = array(
        'id' => 'custom_price',
        'label' => __( 'Custom Price', 'cprice' ),
        'data_type' => 'text', // Let WooCommerce formats our field as price field
        'description' => __( 'Enter the text before price.', 'cprice' ),    
    );

    woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_general_product_data', 'custom_before_price' );


/**
* Save custom meta
**/
add_action( 'woocommerce_process_product_meta', 'save_custom_field' );
function save_custom_field( $post_id ) {

    /*  Get Value */
    $custom_field_value = isset( $_POST['custom_price'] ) ? $_POST['custom_price'] : '';

    /*  Save to _options table (requested answer) */
    $option_name = $post_id.'-custom-price';
    add_option( $option_name, $custom_field_value );  
/*  its updates in wp_option also*/
    update_option( $option_name ,$custom_field_value );            

    /*  Save to postmeta table (normal for woocommerce) */
    $product = wc_get_product( $post_id );
    $product->update_meta_data( 'custom_price', $custom_field_value );
    $product->save();

}
  

Комментарии:

1. Соглашение stackoverflow заключается в том, чтобы уточнить предложенный ответ, предложив отредактировать или предложить обратную связь в комментариях, а затем принять ответ и не создавать несколько почти идентичных ответов.

Ответ №3:

Сохранение значений в таблицу wp_options не является обычным поведением WooCommerce. WooCommerce сохраняет мету продукта в wp_postmeta. Существует множество возможных недостатков хранения данных о конкретных продуктах в wp_options. В частности, если вам нужно вернуть данные в редактор администратора продукта из wp_options, вам нужно будет поработать над методом для этого, поскольку WooCommerce обращается к wp_postmeta за пользовательской метой.

Следующий набор функций создаст ваш пользовательский ввод и сохранит значение при обновлении продукта с помощью WP Admin.

     /**
    * Create custom meta
    **/
    function custom_before_price() {

        $args = array(
            'id' => 'custom_price',
            'label' => __( 'Custom Price', 'cprice' ),
            'data_type' => 'text', // Let WooCommerce formats our field as price field
            'description' => __( 'Enter the text before price.', 'cprice' ),    
        );

        woocommerce_wp_text_input( $args );
    }
    add_action( 'woocommerce_product_options_general_product_data', 'custom_before_price' );


    /**
    * Save custom meta
    **/
    add_action( 'woocommerce_process_product_meta', 'save_custom_field' );
    function save_custom_field( $post_id ) {
        global $wpdb;

        /*  Get Value */
        $custom_field_value = isset( $_POST['custom_price'] ) ? $_POST['custom_price'] : '';

        /*  Save to _options table (requested answer) */
        $option_name = $post_id.'-custom-price';
        $wpdb->replace(
            'wp_options',
            array(
                'option_name' => $option_name,
                'option_value' => $custom_field_value,
            ),
            array(
                '%s',
                '%s',
            )
        );
    

        /*  Save to postmeta table (normal for woocommerce) */
        $product = wc_get_product( $post_id );
        $product->update_meta_data( 'custom_price', $custom_field_value );
        $product->save();

    }
  

Комментарии:

1. вы правы, Джеймс, он работает нормально, но только один раз, когда wp_option не обновляется, он просто сохраняет только первое значение, и после этого он никогда не обновляется, но когда я увидел, что wp_postmeta хранит и обновляет его там.

2. Функция add_option() не обновляет существующие строки. Я отредактировал вышесказанное, чтобы использовать $wpdb-> replace(), который заменит значение или вставит значение. Я не тестировал правку, дайте мне знать, если у вас возникнут проблемы!