Intereting Posts
Заказывать сообщения (по всему сайту) по дате метаданных get_the_ID () работает над моей локальной разработкой, но не на промежуточном сервере шаблон шаблона персонализированного почтового типа на пользовательский таксономический термин wp_get_attachment_url с конкретным image_size? Суб-суб-блоги – создание и импорт содержимого в пользовательский подтип WordPress White Screen перенаправляется с панели управления Мой сайт WordPress использует локальный ip для указания на jquery и другие файлы, как его исправить? Манипулирование show_on_front, page_on_front, page_for_posts и иерархией шаблонов Пользователь Meta stuff Должен ли я использовать get_bloginfo ('stylesheet_directory') или get_stylesheet_directory_uri () при размещении моих js-файлов? Не показывать детей категории Создавать избранные изображения старые сообщения использование wp_cache в плагине Добавление столбца «порядок меню» в пользовательский экран типа сообщения Добавить пользовательский столбец «Дата» в панель «Все пользователи» в WP

Конфликт WordPress с несколькими нагрузками

Я разрабатываю тему на основе одностраничного приложения (SAP), где у меня есть портфолио CPT для отображения элементов портфеля в цикле, отличных от сообщений в блогах.

Я создал 2 отдельных сообщения, загружающих больше функций, которые запускаются при нажатии. Так что сообщения в блогах работают нормально, но при нажатии кнопки «Загрузить больше» на разделе « Портфолио » он добавляет сообщения для «Блога» вместо «Портфолио».

После того, как у меня есть функции кода для блога.

блог-functions.php

// Enqueing Scripts for loading blogs posts via Ajax wp_enqueue_script('ajax_blog_scripts', get_template_directory_uri() . '/assets/js/blog-scripts.js', array(), false, true ); wp_localize_script('ajax_blog_scripts', 'ajaxurl', admin_url('admin-ajax.php') ); // Initiating Ajax Load More Posts Function function loadmore_blog_posts() { $count = $_POST["count"]; $cpt = 1; $args = array( 'posts_per_page' => -1, 'post_type' => 'post', // change the post type if you use a custom post type 'post_status' => 'publish', ); $blog_posts = new WP_Query( $args ); if( $blog_posts->have_posts() ) { while( $blog_posts->have_posts() ) { $blog_posts->the_post(); if( $cpt > $count && $cpt < $count+3 ) { <article id="post-<?php the_ID(); ?>" <?php post_class('post-item'); ?>> Post Content... </article> <?php } $cpt++; } } die(); } add_action( 'wp_ajax_load_more_posts', 'loadmore_blog_posts' ); add_action( 'wp_ajax_nopriv_load_more_posts', 'loadmore_blog_posts' ); 

блог-scripts.js

 // Load Next Posts via AJAX Request $('#blog-section .load-more-btn').click(function() { // Adding Loading Posts spinner on click var $btn = $(this).button('loading'); // Sending Ajax Request for getting more Posts $.post(ajaxurl, { 'action': 'load_more_posts', 'count': $('article.post-item').length }, function(response) { $('#blog-section .blog-posts').append(response); $btn.button('reset'); }); }); 

Разметка цикла

 <div class="blog-posts"> <?php $args = array( 'order' => $blog_post_order, 'posts_per_page' => $blog_post_count ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class('post-item col-sm-6'); ?>> Post Content... </article> <?php wp_reset_postdata(); ?> <?php endwhile; else : ?> <p><?php _e( 'Sorry, there is no post added so far. Please go to Dashboard and add one.', 'theme-slug' ); ?></p> <?php endif; ?> </div> 

После того, как у меня есть функции кода для портфолио.

портфель-scripts.php

 // Enqueing Scripts for loading portfolio posts via Ajax wp_enqueue_script('ajax_portfolio_scripts', get_template_directory_uri() . '/assets/js/portfolio-scripts.js', array(), false, true ); wp_localize_script('ajax_portfolio_scripts', 'ajaxurl', admin_url('admin-ajax.php') ); // Initiating Ajax Load More Posts Function function loadmore_portfolio_posts() { $count = $_POST["count"]; $cpt = 1; $args = array( 'posts_per_page' => -1, 'post_type' => 'portfolio', // change the post type if you use a custom post type 'post_status' => 'publish', ); $portfolio_posts = new WP_Query( $args ); if( $portfolio_posts->have_posts() ) { while( $portfolio_posts->have_posts() ) { $portfolio_posts->the_post(); if( $cpt > $count && $cpt < $count+5 ) { ?> <div id="post-<?php the_ID(); ?>" <?php post_class('col-xl-2 col-lg-3 col-md-3 col-sm-4 col-xs-6 portfolio-item'); ?>> Loop Content </div> <?php } $cpt++; } } die(); } add_action( 'wp_ajax_load_more_posts', 'loadmore_portfolio_posts' ); add_action( 'wp_ajax_nopriv_load_more_posts', 'loadmore_portfolio_posts' ); 

Портфельный scripts.js

 // Load Next Posts via AJAX Request $('#portfolio-section .load-more-btn').click(function() { // Adding Loading Posts spinner on click var $btn = $(this).button('loading'); // Sending Ajax Request for getting more Posts $.post(ajaxurl, { 'action': 'load_more_posts', 'count': $('div.portfolio-item').length }, function(response) { $('#portfolio-section .portfolio-items').append(response); $btn.button('reset'); }); }); 

Разметка цикла

 <div class="portfolio-items"> <?php $args = array( 'post_type' => 'portfolio', 'order' => $portfolio_post_order, 'posts_per_page' => $portfolio_post_count ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class('col-xl-2 col-lg-3 col-md-3 col-sm-4 col-xs-6 portfolio-item'); ?>> Loop Content </div> <?php wp_reset_postdata(); ?> <?php endwhile; else : ?> <p><?php _e( 'Sorry, there is no post added so far. Please go to Dashboard and add one.', 'theme-slug' ); ?></p> <?php endif; ?> </div> 

проверьте свои портфолио-scripts.js и blog-scripts.js, оба действия содержат одно и то же действие.

«действие»: «load_more_posts»,

Итак, для вашего действия portfolio-scripts.js должно быть

«действие»: «loadmore_portfolio_posts»,

вместо

«действие»: «load_more_posts»,

Вы объявляете функцию в портфолио scripts.php, но не вызываете в ajax. Я думаю, что изменение действия решит вашу проблему.

С помощью AJAX вам нужно echo возвращаемые значения прямо перед вызовом die() . Поэтому вместо

  if( $cpt > $count && $cpt < $count+3 ) { <article id="post-<?php the_ID(); ?>" <?php post_class('post-item'); ?>> Post Content... </article> <?php } 

Попробуйте сохранить свой вывод в переменной, например:

 $content = ''; if( $cpt > $count && $cpt < $count+3 ) { $content .= "<article id=post-" . the_ID(); . post_class('post-item'); . "Post Content... </article>"; } 

Затем в конце функции отправьте его обратно на функцию вызова AJAX:

 echo $content; wp_die(); 

Благодаря вам, пареньм после вашей помощи и немногому поиску, я наконец сумею это сделать. Насколько я понимаю, проблема была в wp_localize_script . На обоих блогах-functions.php & portfolio-functions.php .

Проблема была связана с $ object_name , поэтому я сделал ее уникальной до ajaxurl . Ниже приведен мой обновленный код.

блог-functions.php

 wp_localize_script('ajax_blog_scripts', 'postAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

портфель-functions.php

 wp_localize_script('ajax_portfolio_scripts', 'portfolioAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

Переменная jQuery для каждого объекта Ajax $ Object_Name

blog- postAjax.ajaxurlpostAjax.ajaxurl

портфолио-scripts.jsportfolioAjax.ajaxurl