Add custom settings tab for products in WooCommerce which allows to display an iframe

Viewed 813

I am creating a plugin that will change the look of the gallery in woocommerce. That is, instead of the gallery, an iframe will open. This works for all products.

add_filter( 'woocommerce_single_product_image_thumbnail_html', 'product_image');

function product_image(){
    $product = wc_get_product();
    $product_id = $product->get_id();
    $threedLink = 'http://sameurl/' .$product_id ;
    $content .= '<iframe src='.$threedLink.'  width="99%" height="300px"></iframe>';
    return $content;

}

But I need this to work not for all products, but for the chosen ones. That is, in the entire load of the product, you need to create a checkmark, where the administrator must agree to show the iframe. I created a tab in the product loading panel

function wk_custom_product_tab( $default_tabs ) {
    $default_tabs['custom_tab'] = array(
        'label'   =>  __( 'Custom Tab', 'domain' ),
        'target'  =>  'wk_custom_tab_data',
        'priority' => 60,
        'class'   => array()
    );
    return $default_tabs;
}

add_filter( 'woocommerce_product_data_tabs', 'wk_custom_product_tab', 10, 1 );

add_action( 'woocommerce_product_data_panels', 'wk_custom_tab_data' );

function wk_custom_tab_data() {
   echo '<div id="wk_custom_tab_data" class="panel woocommerce_options_panel">ddddd</div>';
}

how can I add a checkmark instead of ddddd and connect it with the plugin download?

1 Answers
  • Add custom product tab
  • Add content to the product tab (checkbox)
  • Save the checkbox
  • Get value, 'yes' or 'no' and if yes, display iframe
/**
 * Add custom product setting tab.
 */
function filter_woocommerce_product_data_tabs( $default_tabs ) {
    $default_tabs['custom_tab'] = array(
        'label'   =>  __( 'Custom Tab', 'domain' ),
        'target'  =>  'wk_custom_tab_data',
        'priority' => 60,
        'class'   => array()
    );
    return $default_tabs;
}
add_filter( 'woocommerce_product_data_tabs', 'filter_woocommerce_product_data_tabs', 10, 1 );

/**
 * Contents custom product setting tab.
 */
function action_woocommerce_product_data_panels() {
    global $post;

    // Note the 'id' attribute needs to match the 'target' parameter set above
    echo '<div id="wk_custom_tab_data" class="panel woocommerce_options_panel">';

    // Add checkbox
    woocommerce_wp_checkbox( array(
        'id'        => '_allow_iframe',
        'label'     => __( 'Allow iFrame', 'woocommerce' ),
    ) );

    echo '</div>';
}
add_action( 'woocommerce_product_data_panels', 'action_woocommerce_product_data_panels', 10, 0 );

/**
 * Save the checkbox.
 */
function action_woocommerce_admin_process_product_object( $product ) {
    // Isset, yes or no
    $allow_iframe = isset( $_POST['_allow_iframe'] ) ? 'yes' : 'no';

    // Update meta
    $product->update_meta_data( '_allow_iframe', $allow_iframe );
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 );

/**
 * Display iframe if checkbox = 'yes'
 */
function filter_woocommerce_single_product_image_thumbnail_html( $html, $post_thumbnail_id ) {
    // Get the global product object
    global $product;
    
    // Is a WC product
    if ( is_a( $product, 'WC_Product' ) ) {
        // Get meta
        $value = $product->get_meta( '_allow_iframe' );

        // value = 'yes'
        if ( $value == 'yes' ) {
            // Get product id
            $product_id = $product->get_id();
            
            $threed_link = 'http://myurl/' . $product_id;
            $html .= '<iframe src=' . $threed_link . ' width="99%" height="300px"></iframe>';   
        }
    }

    return $html;
}
add_filter( 'woocommerce_single_product_image_thumbnail_html', 'filter_woocommerce_single_product_image_thumbnail_html', 10, 2 );
Related