создание пользовательского сообщения woocommerce на пользовательской странице для использования ajax

#php #wordpress

#php #wordpress

Вопрос:

я пытаюсь выполнить вызов ajax для отображения части содержимого сообщения на моей главной странице, и у меня все настроено, но проблема в том, что я не могу получить требуемые хуки woocommerce в файле действий ajax, потому что я не могу получить идентификатор текущих сообщений и цикл для использования хуков. так что я не знаю, что мне делать

 add_action("wp_ajax_product_ajax", "product_ajax");
add_action("wp_ajax_nopriv_product_ajax", "product_ajax");
function product_ajax()  {
defined( 'ABSPATH' ) || exit;
global $product;
?>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog"
        aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                    <div class="container">
                        <div class="modal-main">
                            <div class="row">
                                <div id="product-<?php the_ID(); ?>" <?php wc_product_class( '', 
$product ); ?>>
                                    <div class="col-md-6">
                                        <div class="description-prodact-modal">
                                            <?php woocommerce_template_single_title(); ?>
                                            <p>
</p>
                                            <div class="prise-modal">
                                                <p></p>
                                            </div>

                                            <div class="cart-modal">
                                                <form action="">
                                                    <div class="columns">
                                                        <div class="favorite-modal">
                                                            <button><i class="lar la-heart"></i></button>
                                                        </div>
                                                        <div class="add-to-cart">
                                                            <button><i class="las la-shopping-cart"></i>افزودن به سبد خرید</button>
                                                        </div>
                                                        <div class="number-prodact">
                                                            <input type="button" name="" id="" value=" ">
                                                            <input type="text" value="1">
                                                            <input type="button" name="" id="" value="-">
                                                        </div>
                                                    </div>
                                                </form>   
                                            </div>
                                            <hr>
                                            <div class="prodact-meta">
                                                <span class="category-prodact">دسته بندی:
                                                    <a href="#">لوازم منزل</a>
                                                </span>
                                                <span class="tag-prodact">برچسب:
                                                    <a href="#">صندلی , میز</a>
                                                </span>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col-md-6">
                                        <div class="gallery-prodact">
                                            <div class="gallery-cr owl-carousel
                                                owl-theme">
                                                <div class="item"><img
                                                        src="assets/img/1-12-433x516.jpg"
                                                        alt="image"></div>
                                                <div class="item"><img
                                                        src="assets/img/1-17-433x516.jpg"
                                                        alt="image"></div>
                                                <div class="item"><img
                                                        src="assets/img/1-19-433x516.jpg"
                                                        alt="image"></div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
            </div>
        </div>
    </div>
<?php
wp_die();
  

}

и у меня есть это на другой странице :

 <script>
            jQuery(document).ready(function () {
                jQuery('.main_ajax_loader').hide();
                jQuery(".ajax_link").click(function (e) {
                    e.preventDefault();
                    var ajax_url = "<?php echo esc_js(admin_url('admin-ajax.php')); ?>";
                    
                    jQuery.ajax({
                        url: ajax_url,
                        type: "post",
                        data: {action: "product_ajax"},
                        
                        success: function (response) {
                            jQuery('.main_ajax_loader').show()
                            jQuery(".ajax_content").html(response);
                            jQuery('.main_ajax_loader').hide();

                        },
                        error: function (response) {
                        }
                    })
                })
            });
        </script>
  

итак, как я должен использовать хуки woocommerce на этой странице?

Комментарии:

1. Вы добавляете код в functions.php ? На какой странице находится ваш AJAX-скрипт?

2. да, я включил файл, и я могу получить вызов ajax. скрипты находятся в content-product.php

3. $product Не возвращает никакого значения?

4. все работает нормально, проблема в том, что я действительно не знаю, как получить идентификатор сообщения и использовать для него необходимые хуки.

Ответ №1:

создайте новый скрытый ввод на исходной странице

 <input type="hidden" name="my_product_id_ajax" class="my_product_id_ajax" value="<?php echo $product_id; ?>" />
  

затем передайте входное значение в вызове ajax :

$product_id = $_POST['parameter_name'];

имя параметра — это имя переменной, которую вы отправляете в вызове ajax ;

Ответ №2:

В зависимости от того, чего вы хотите достичь, у меня есть несколько идей. Я предполагаю, что вы специально ищете один идентификатор продукта, с которым вы работаете content-product.php .

В первом примере кода у вас есть $product переменная. Если это не пустое значение, вы, вероятно, сможете получить идентификатор с $product->get_id() помощью .

Если вам нужно передать идентификатор через AJAX во втором примере кода, вы, вероятно, измените data: {action: "product_ajax"} на data: {action: "product_ajax", product_id: "<?php echo $product->get_id();?>"} .

Затем вы можете получить значение в своем первом примере кода, делая что-то вроде этого:

 if ( ! empty( $_POST['product_id'] ) {
    $product_id = intval( $_POST['product_id'] );
    $product = wc_get_product( $product_id );

    // Do something with $product
}
  

Если вы находитесь на обычной странице WordPress, вы могли бы сделать так:

data: {action: "product_ajax", post_id: "<?php echo get_the_ID();?>"} .

Комментарии:

1. Я сделал, как вы сказали, но product_id равен нулю, я получаю это уведомление: Неопределенная переменная: product_id

2. Можете ли вы проверить $product , имеет ли какое-либо значение content-product.php ? Вот где ваш сценарий правильный?