Я делаю шорткод (вдохновленный кодом 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');