Избегайте потери значений из пользовательских полей продукта администратора в Woocommerce - PullRequest
0 голосов
/ 20 сентября 2018

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

Поля по умолчанию на вкладке "Общие" и даже поля сторонних производителей не удаляются.Мне интересно, есть ли лучший способ создать поля и хранить эти данные, чем то, как я это делаю.

Вот мой код:

add_action( 'woocommerce_product_options_pricing', 'mpq_add_location_textbox_to_products' );        

function mpq_add_location_textbox_to_products() {           
    if ( (has_term( 'workshops', 'product_cat' ) )){     
        woocommerce_wp_textarea_input( array( 
            'id' => 'mpq_location', 
            'class' => '', 
            'label' => 'Location:',
            'placeholder' => 'Enter Location'
            ) 
        );      
    }
}

add_action( 'save_post', 'mpq_save_location_textbox_to_post_meta' );

function mpq_save_location_textbox_to_post_meta( $product_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;
    if ( isset( $_POST['mpq_location'] ) ) {
            update_post_meta( $product_id, 'mpq_location', $_POST['mpq_location'] );
    } else delete_post_meta( $product_id, 'mpq_location' );
}

1 Ответ

0 голосов
/ 20 сентября 2018

Есть некоторые ошибки и пропущенные вещи ... Попробуйте вместо этого следующее, которое должно решить вашу проблему:

add_action( 'woocommerce_product_options_pricing', 'add_location_product_custom_textaread_field' );
function add_location_product_custom_textaread_field() {
    global $post;

    $term = 'workshops'; // Product category term slug

    if ( has_term( $term, 'product_cat', $post->ID ) ){
        woocommerce_wp_textarea_input( array(
            'id' => '_mpq_location',
            'class' => '',
            'label' => 'Location:',
            'placeholder' => 'Enter Location'
        ) );

        echo '<input type="hidden" name="_mpq_location_nonce" value="' . wp_create_nonce() . '">';
    }
}

add_action( 'save_post_product', 'save_location_product_custom_textaread_field', 20, 1 );
function save_location_product_custom_textaread_field( $post_id ) {
    if ( ! isset( $_POST[ '_mpq_location_nonce' ] ) ) {
        return $post_id;
    }
    if ( ! wp_verify_nonce( $_POST[ '_mpq_location_nonce' ] ) ) {
        return $post_id;
    }
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    if ( ! current_user_can( 'edit_product', $post_id ) ) {
        return $post_id;
    }
    if ( isset( $_POST['_mpq_location'] ) ) {
        update_post_meta( $post_id, '_mpq_location', sanitize_textarea_field($_POST['_mpq_location']) );
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.

Я изменил ключ мяса на _mpq_location и удалил else delete_post_meta()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...