0

I'm trying to create custom popup box for all loop products in woocommerce shop page. But it's not working, i think it need some code correction,

functions.php code

add_action( 'woocommerce_after_shop_loop_item', 'product_visibility_button', 5 );
function product_visibility_button() {

    if ( is_user_logged_in() ) {
        $user = wp_get_current_user();
        if ( in_array( 'administrator', (array) $user->roles ) ) {
            ?>
            <button type="button" class="button" id="but" style="margin:10px" >Open Popup</button>
            <div style="display: none;" class="pop-outer">
            <div class="pop-inner">
                <button class="close">X</button>
                <h2>This is a custom pop-up example</h2>
                <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
            </div>
        </div>
            <?php
        }
    }
}

jquery code

           $(document).ready(function (){
                $(".open").click(function (){
                    $(".pop-outer").fadeIn("slow");
                });
                $(".close").click(function (){
                    $(".pop-outer").fadeOut("slow");
                });
            });

CSS

.pop-outer {
            background-color: rgba(0, 0, 0, 0.5);
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }
        .pop-inner {
            background-color: #fff;
            width: 500px;
            height: 300px;
            padding: 25px;
            margin: 5% auto;
        }

See also attached screenshotenter image description here

Is it possible to display for all products ?

3
  • You have five actions you can hook into that are inside the li of product. woocommerce_before_shop_loop_item, woocommerce_before_shop_loop_item_title, woocommerce_shop_loop_item_title, woocommerce_after_shop_loop_item_title, woocommerce_after_shop_loop_item. You can see them here. Nov 16, 2021 at 11:09
  • Right but popup in not working, it displays for all products on single click below every products. Nov 16, 2021 at 11:11
  • Thats because you target the class directly, better use .closest() and then .find() the popup element Nov 16, 2021 at 11:12

1 Answer 1

1

Use below code. Tested and Worked perfectly.

functions.php

add_action( 'woocommerce_after_shop_loop_item', 'product_visibility_button', 5 );
function product_visibility_button() {
    if ( is_user_logged_in() ) {
        $user = wp_get_current_user();
        if ( in_array( 'administrator', (array) $user->roles ) ) {
            ?>
            <button type="button" class="button" id="but" style="margin:10px" >Open Popup</button>
            <div style="display: none;" class="pop-outer">
            <div class="pop-inner">
                <button class="close">X</button>
                <h2>This is a custom pop-up example</h2>
                <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
            </div>
        </div>
            <?php
        }
    }
}

jQuery Code

jQuery(document).ready(function (){
    jQuery(".button").click(function (){
        jQuery(this).next().fadeIn("slow");
    });
    jQuery(".close").click(function (){
        jQuery(this).closest(".pop-outer").fadeOut("slow");
    });
});

CSS Code

.pop-outer {
    background-color: rgba(0, 0, 0, 0.5);
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10;
}
.pop-inner {
    background-color: #fff;
    width: 500px;
    height: auto;
    padding: 25px;
    margin: 5% auto;
}
1
  • Wow, many thanks Tanmay Nov 17, 2021 at 8:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.