Добавить в корзину Проблемы с шорткодами - PullRequest
0 голосов
/ 21 апреля 2020

Я делаю шорткод (вдохновленный кодом woocommerce), чтобы добавить его в корзину в случае шорткода с SKU в качестве входного параметра. Прямо сейчас есть несколько вопросов, как санировать и проверять входные SKU? Я хочу сделать это только для простого SKU продукта, так как моя цена не меняется при изменении раскрывающегося списка в случае вариации SKU. sku - это jtta-164 или. Итак, я могу определить, что это вариация, если это jtta-164 или нет, но в случае jtta-164. Итак, как определить, является ли это родительским вариантом или нет. Вот мой код: -

/**
 * Shortcode for add to cart
 */
function elementor_add_to_cart($atts){

        if ( empty( $atts ) ) {
            return '';
        }
        //how to validate $atts['sku'] is a sku or not?
        if (!isset( $atts['sku'] ) ||  $atts['sku']=="" ||  $atts['sku']==" " ) {
            return 'Please Enter a simple product sku';
        }

        $args = array(
            'posts_per_page'      => 1,
            'post_type'           => 'product',
            'post_status'         => 'publish',
            'ignore_sticky_posts' => 1,
            'no_found_rows'       => 1,
        );

        if ( isset( $atts['sku'] ) ) {
            $args['meta_query'][] = array(
                'key'     => '_sku',
                'value'   => sanitize_text_field( $atts['sku'] ),//here it's sanitized but is this enough?
                'compare' => '=',
            );

            $args['post_type'] = array( 'product', 'product_variation' );
        }
        remove_action( 'woocommerce_single_product_summary','woocommerce_template_single_title',5 );

        $single_product = new WP_Query( $args );

        $preselected_id = '0';

        // Check if sku is a variation and this doesn't work for parent variation
        if ( isset( $atts['sku'] ) && $single_product->have_posts() && 'product_variation' === $single_product->post->post_type ) {

          //for future enhancement
          return 'please enter only simple product skus';

        }

        // For "is_single" to always make load comments_template() for reviews.
        $single_product->is_single = true;

        ob_start();

        while ( $single_product->have_posts() ) {
            $single_product->the_post()
            ?>
            <div class="single-product" data-product-page-preselected-id="<?php echo esc_attr( $preselected_id ); ?>">
                <div  id="product-<?php the_ID(); ?>" <?php post_class(); ?>>
                            <div class=" product-info-container">
                                        <?php

                                            do_action( 'woocommerce_before_single_product' );?>
                                        <div class="summary entry-summary">
                                            <?php

                                                do_action( 'woocommerce_single_product_summary' );
                                            ?>
                                        </div>
                                        <?php do_action( 'woocommerce_after_single_product' ); ?>
                            </div>        
                </div>
            </div>
            <?php
        }
        wp_enqueue_script( 'wc-single-product' );

        wp_enqueue_script( 'elementor-add-to-cart', get_template_directory_uri() . '/pl-custom/front-end-assets/js/elementor-add-to-cart.js', array('jquery'),'',true );

        wp_reset_postdata();

        add_action( 'woocommerce_single_product_summary','woocommerce_template_single_title',5 );

       return '<div class="woocommerce">' . ob_get_clean() . '</div>';

}
add_shortcode('add_to_cart_elemntor','elementor_add_to_cart');
...