为什么WooCommerce分组模板打印未发布的产品?

时间:2021-08-27 作者:Dennis

似乎是分组的。php模板还打印具有概念状态的产品。我不知道这是否是正常的行为,但这似乎很奇怪。它只应打印设置为“已发布”的产品。

我复制了原始Woocommerce文件并将其复制到我的模板中:

yourtheme/woocommerce/single-product/add-to-cart/grouped.php
这是分组的源代码。php模板:

<?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\' ); ?>
当我检查子产品的输出时,我看到产品状态也作为类打印:

<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>
我可以添加一些CSS来隐藏类中的所有内容status-draft, 但我只是不想在我的页面上显示HTML。因此,应该从该查询中排除status=草稿或概念。

1 个回复
最合适的回答,由SO网友:Martin Mirchev 整理而成

因为我不能只是评论。如果您以管理员身份登录,这是正常行为。如果您作为客人或客户角色访问产品,则不会看到草稿产品。

相关推荐

将代码添加到子级的主题css和php不能覆盖某些元素

我已经安装了二十一主题,并在此基础上创建了一个子主题。我复制了整个风格。来自父主题的css,以及我想要对子主题的css和大多数css工作所做的所有更改,但少数css无法覆盖。我还尝试添加!这很重要,但也不起作用。在第一个示例中,背景颜色:#448fbf应用于子主题,但在加载网站时不会显示。它仍然作为父主题的背景色。第一个截图来自我的WP仪表板,第二个截图来自chrome的inspector。在第二个示例中,-webkit外观:none未应用于子主题。我想知道是不是主题本身导致了这个问题。我在这个主题上花了