egor_arinov
@egor_arinov
Веб-разработчик

Как запустить срабатывание php функции по событию?

Суть в чём. При отправке формы, данные передаются на admin-ajax.php. В functions.php принимает данные в функции ajax_form(). Потом со страницы от куда выполнилась отправка выполняется показ блока с товарами.
Но функция ajax_form() выполняется сразу при открытии страницы.

Обработка формы
$("#choose-btnShow").on("click", function (event) {
     event.preventDefault();
     var choose = $("#chooseForm").serialize(); 
     $.ajax({
         url: "http://localhost/Likeopt/wordpress/wp-admin/admin-ajax.php",
         method: 'post',
         data: {
             action: 'ajax_order',
             choose: choose
         },
         success: function (response) {
             alert("1");
             console.log(choose);
         }
     });
 });

add_action('wp_ajax_nopriv_ajax_order', 'ajax_form' );
add_action('wp_ajax_ajax_order', 'ajax_form' );
function ajax_form(){
    $choose    = join(', ', $_POST['choose']);
    echo $choose;						    
}


Вывод товара

ajax_form();
									$posts = get_posts( array(
										'numberposts' => 0,
										'category_name'    => '$choose',
										'orderby'     => 'date',
										'order'       => 'DESC',
										'include'     => array(),
										'exclude'     => array(),
										'meta_key'    => '',
										'meta_value'  =>'',
										'post_type'   => 'post',
										'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
									) );
								
									foreach( $posts as $post ){
										setup_postdata($post);
									    ?>
													<div class="main-like__product">
														<?php 
								
														$image = get_field('product-img');
								
														if( !empty($image) ): ?>
															
															<div class="main-like__productimg" style="background-image: url('<?php echo $image['url']; ?>');"></div>
															<!-- /.main-like__productimg -->
														<?php endif; ?>
														
														<div class="main-like__productdescr">
															<div class="main-like__productname"><?php the_title(); ?></div>
															<!-- /.main-like__productname -->
															<div class="main-like__productprice"><?php the_field("product-price") ?></div>
															<!-- /.main-like__productprice -->
															<a class="main-like__productbtn button-link" href="<?php the_permalink(); ?>" target="_blank">Подробнее</a>
															<!-- /.main-like__productbtn button-like -->
														</div>
														<!-- /.main-like__productdescr -->
													</div>
													<!-- /.main-like__product -->
									    <?php
									}
								
									wp_reset_postdata(); // сброс
								?>
  • Вопрос задан
  • 371 просмотр
Пригласить эксперта
Ответы на вопрос 2
alex-1917
@alex-1917
Если ответ помог, отметь решением
Ну напиши обработчик в две строки PHP и запускай его одной строкой JS
Ответ написан
Palych_tw
@Palych_tw
Типа веб-разработчик
Вот секция
Вывод товара
она где у вас? в шаблоне страницы? Тогда чему вы удивляетесь? у вас там прямой вызов функции ajax_form();

ААА, я понял.. это вы пытаетесь в такой извращенной форме ответ из ajax запроса закинуть в уже отработанный php скрипт и отрендеренный HTML документ на клиенте, и сразу реактивно на пхп отрендерить новые товары? У меня для вас плохие новости. если коротко - это так не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы