#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
? Вот где ваш сценарий правильный?