0

It seems that the grouped.php template also prints products with status on concept. I don't know if this is normal behaviour, but that seems very strange. It only should print the products that are set to Published.

I've duplicated the original Woocommerce file and copied it in my template:

yourtheme/woocommerce/single-product/add-to-cart/grouped.php

This is the source code of the grouped.php template:

<?php
/**
 * Grouped product add to cart
 */

defined( 'ABSPATH' ) || exit;

global $product, $post;

do_action( 'woocommerce_before_add_to_cart_form' ); ?>

<form class="cart grouped_form" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data'>
    <div class="tickets-wrapper__tickets">
        
            <?php
            $quantites_required      = false;
            $previous_post           = $post;
            $grouped_product_columns = apply_filters(
                'woocommerce_grouped_product_columns',
                array(
                    'quantity',
                    'label',
                    'price',
                ),
                $product
            );

            do_action( 'woocommerce_grouped_product_list_before', $grouped_product_columns, $quantites_required, $product );

            foreach ( $grouped_products as $grouped_product_child ) {
                $post_object        = get_post( $grouped_product_child->get_id() );
                $quantites_required = $quantites_required || ( $grouped_product_child->is_purchasable() && ! $grouped_product_child->has_options() );
                $post               = $post_object; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
                setup_postdata( $post );

                echo '<div id="product-' . esc_attr( $grouped_product_child->get_id() ) . '" class="tickets-wrapper__tickets__block woocommerce-grouped-product-list-item ' . esc_attr( implode( ' ', wc_get_product_class( '', $grouped_product_child ) ) ) . '">';

                // Output columns for each product.
                foreach ( $grouped_product_columns as $column_id ) {
                    do_action( 'woocommerce_grouped_product_list_before_' . $column_id, $grouped_product_child );

                    switch ( $column_id ) {
                        case 'quantity':
                            ob_start();

                            if ( ! $grouped_product_child->is_purchasable() || $grouped_product_child->has_options() || ! $grouped_product_child->is_in_stock() ) {
                                woocommerce_template_loop_add_to_cart();
                            } elseif ( $grouped_product_child->is_sold_individually() ) {
                                echo '<input type="checkbox" name="' . esc_attr( 'quantity[' . $grouped_product_child->get_id() . ']' ) . '" value="1" class="wc-grouped-product-add-to-cart-checkbox" />';
                            } else {
                                do_action( 'woocommerce_before_add_to_cart_quantity' );

                                woocommerce_quantity_input(
                                    array(
                                        'input_name'  => 'quantity[' . $grouped_product_child->get_id() . ']',
                                        'input_value' => isset( $_POST['quantity'][ $grouped_product_child->get_id() ] ) ? wc_stock_amount( wc_clean( wp_unslash( $_POST['quantity'][ $grouped_product_child->get_id() ] ) ) ) : '', // phpcs:ignore WordPress.Security.NonceVerification.Missing
                                        'min_value'   => apply_filters( 'woocommerce_quantity_input_min', 0, $grouped_product_child ),
                                        'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $grouped_product_child->get_max_purchase_quantity(), $grouped_product_child ),
                                        'placeholder' => '0',
                                    )
                                );

                                do_action( 'woocommerce_after_add_to_cart_quantity' );
                            }

                            $value = ob_get_clean();
                           
                            echo "<div class='selectNumber'>";
                            echo "<span class='selectNumber__increase selectNumber__change' data-target='". esc_attr( $grouped_product_child->get_id() ) ."'>+</span>";
                            echo "<input disabled value='0' type='text' id='selectNumber-". esc_attr( $grouped_product_child->get_id() ) ."' />";
                            echo "<span class='selectNumber__decrease selectNumber__change' data-target='". esc_attr( $grouped_product_child->get_id() ) ."'>-</span>";
                            echo "</div>";

                            break;
                        case 'label':
                            $value  = '<label for="product-' . esc_attr( $grouped_product_child->get_id() ) . '">';
                            $value .= $grouped_product_child->is_visible() ? '<span>' . $grouped_product_child->get_name() . '</span>' : $grouped_product_child->get_name();
                            $value .= '</label>';
                            break;
                        case 'price':
                            $value = $grouped_product_child->get_price_html() . wc_get_stock_html( $grouped_product_child );
                            break;
                        default:
                            $value = '';
                            break;
                    }

                    echo '<div class="woocommerce-grouped-product-list-item__' . esc_attr( $column_id ) . '">' . apply_filters( 'woocommerce_grouped_product_list_column_' . $column_id, $value, $grouped_product_child ) . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

                    do_action( 'woocommerce_grouped_product_list_after_' . $column_id, $grouped_product_child );
                }

                echo '</div>'; // woocommerce-grouped-product-list-item
            }
            $post = $previous_post; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
            setup_postdata( $post );

            do_action( 'woocommerce_grouped_product_list_after', $grouped_product_columns, $quantites_required, $product );
            ?>
        
    </div> <!-- tickets-wrapper__tickets -->

    <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>" />

    <?php if ( $quantites_required ) : ?>

        <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>

        <div class="text--right margin-top-1 top-block top-block--small">
            <button type="submit" class="single_add_to_cart_button button button--primary"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
        </div>
        <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>

    <?php endif; ?>
</form>

<?php do_action( 'woocommerce_after_add_to_cart_form' ); ?>

When I check the output of on child product, I see that the product status is also printed as a class:

<div id="product-63105" class="tickets-wrapper__tickets__block woocommerce-grouped-product-list-item product type-product post-63105 status-draft instock product_cat-geen-onderdeel-van-een-categorie virtual taxable purchasable product-type-enviso_ticket">

</div>

I can add some CSS to hide everything with class status-draft, but I just don't want that HTML on my page. So status = draft or concept should be excluded from that query.

1 Answer 1

1

Since i can't just comment. This is normal behavior if you are logged in as admin. If you visit the products as guest or customer role you wont see draft products.

1
  • Ow, how stupid of me. That was indeed the issue. When I'm not logged in, the products are shown. Thank you.
    – Dennis
    Aug 27, 2021 at 8:15

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.