2017-11-25 6 views
0

私はWordPressの電子商取引のウェブサイトで、選択したショッピングプラットフォームを使って作業しています。 WooCommerce。WooCommerceのカスタムチェックボックスで、選択解除すると「添付された」PHPコーディングが削除されないのはなぜですか?

私はfunctions.phpファイルに次のコードを配置することで、WooCommerce製品ダッシュボードの中に、カスタムチェックボックスを作成しました:カスタムフィールドの値を保存するには

function product_custom_fields_add(){ 

    global $post; 

    $input_checkbox = get_post_meta($post->ID, '_engrave_text_option', true); 
    if(empty($input_checkbox) || $input_checkbox == 'no') $input_checkbox = ''; 

     echo '<div class="product_custom_field">'; 

    woocommerce_wp_checkbox(
     array(
      'id'  => '_engrave_text_option', 
      'desc'  => __('set custom Engrave text field', 'woocommerce'), 
      'label'  => __('Display custom Engrave text field', 'woocommerce'), 
      'desc_tip' => 'true', 
      'value'  => $input_checkbox 
     ) 
    ); 

echo '</div>'; 
} 
add_action('woocommerce_product_options_advanced', 'product_custom_fields_add'); 

、私はfunctions.phpに次のコードを挿入していますファイル:

function woocommerce_product_custom_fields_save($post_id){    
    $_engrave_text_option = isset($_POST['_engrave_text_option']) ? 'yes' : 'no'; 
    update_post_meta($post_id, '_engrave_text_option', $_engrave_text_option);  
} 
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save'); 

アイデアは、サイト管理者は、チェックボックスを選択したとき、それは製品ページ上のカスタムテキストボックスを作成するために、以下のコードを、トリガということです

function add_engrave_text_field() { 
    global $post; 

    // Get the checkbox value 
    $engrave_option = get_post_meta($post->ID, '_engrave_text_option', true); 

    // If is single product page and have the "engrave text option" enabled we display the field 
    if (is_product() && ! empty($engrave_option)) { 

     ?> 
     <div> 
      <label class="product-custom-text-label" for="engrave_text"><?php _e('Custom Letters:', 'woocommerce'); ?><br> 
       <input style="min-width:220px" type="text" class="product-counter" name="engrave_text" placeholder="<?php _e('Enter Your Custom Letters ...', 'woocommerce'); ?>" minlength="<?php global $post; echo get_post_meta($post->ID,'_minimum_engrave_text_option',true);?>" maxlength="<?php global $post; echo get_post_meta($post->ID,'_maximum_engrave_text_option',true);?>" /> 
      </label> 
     </div><br> 
<?php 
    } 
} 
add_action('woocommerce_before_add_to_cart_button', 'add_engrave_text_field', 0); 
?> 

上記のコードは、チェックボックスをオンにして、製品ページにカスタムテキストフィールドを作成するときに機能します。問題がある場合、チェックボックスの選択が解除されると、カスタムテキストボックスは製品ページに残ります。

私はどこに間違っているのか誰にでも見えますか?ここで

答えて

1

は、ポイントが欠落しています。

$_engrave_text_option = isset($_POST['_engrave_text_option']) ? 'yes' : 'no'; 

は、だからあなたのメタ値は空の値を取得することはありません。はいまたはいいえになります。 2つのソリューションがあります。

  1. 「いいえ」を「」に変更します。

    $ _engrave_text_option = isset($ _POST ['_ engrave_text_option'])? 'はい' : '';

    場合は 'はい' ==する

  2. 変更空(is_product()& & $ engrave_option == 'はい'){

+0

私はあなたがこのコメントに何を意味するかunderstantはありません。私の答えはこの問題の問題を解決しましたか?私はイエスと思う。 –

+0

ありがとうございます。チェックボックスの問題を解決します。 :-) – Craig

関連する問題