WordPress Konflikt mit mehreren laden mehr Posts functionen auf klicken

Ich entwickle ein Single-Page-Application (SAP) -basiertes Thema, bei dem ich Portfolio- CPT verwende, um Portfolioelemente in einer anderen Schleife als Blog-Posts anzuzeigen.

Ich habe 2 separate Beiträge gebaut, lade mehr functionen, die beim Klick auslösen. SO funktionieren die Blog-Posts gut, aber wenn Sie auf die Schaltfläche “Mehr laden” im Portfolio- Bereich klicken, werden Posts für Blog statt für Portfolio angehängt.

Folgend habe ich Code-functionen für Blog.

Blog-functionen.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-" > Post Content...  <?php } $cpt++; } } die(); } add_action( 'wp_ajax_load_more_posts', 'loadmore_blog_posts' ); add_action( 'wp_ajax_nopriv_load_more_posts', 'loadmore_blog_posts' ); 

Blog-Skripte.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'); }); }); 

Schleifenmarkierung

 
$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-" > Post Content...

Nachfolgend habe ich Code-functionen für Portfolio.

Portfolio-Skripte.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  <div id="post-" > Loop Content 
<?php } $cpt++; } } die(); } add_action( 'wp_ajax_load_more_posts', 'loadmore_portfolio_posts' ); add_action( 'wp_ajax_nopriv_load_more_posts', 'loadmore_portfolio_posts' );

portfolio-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'); }); }); 

Schleifenmarkierung

 
'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-" > Loop Content

Solutions Collecting From Web of "WordPress Konflikt mit mehreren laden mehr Posts functionen auf klicken"

Überprüfen Sie Ihre Portfolio-Skripte.js und Blog-Skripte.js beide Aktionen enthalten die gleiche Aktion.

‘Aktion’: ‘load_more_posts’,

Also für Ihre portfolio-scripts.js Aktion sollte sein

‘Aktion’: ‘loadmore_portfolio_posts’,

Anstatt von

‘Aktion’: ‘load_more_posts’,

Sie deklarieren die function in portfolio-scripts.php, rufen aber nicht den Ajax auf. Ich denke, ändern Sie die Aktion, um Ihr Problem zu lösen.

Mit AJAX müssen Sie Ihre Rückgabewerte direkt vor dem Aufruf von die() echo . Also statt

  if( $cpt > $count && $cpt < $count+3 ) { 
> Post Content... < ?php }

Versuchen Sie, Ihre Ausgabe in einer Variablen wie dieser zu speichern:

 $content = ''; if( $cpt > $count && $cpt < $count+3 ) { $content .= "
"; }

Senden Sie es am Ende der function an die AJAX-Aufruffunktion zurück:

 echo $content; wp_die(); 

Danke an euch, nach eurer Hilfe und ein bisschen Suchen, schaffe ich es endlich. Soweit ich weiß , war das Problem mit wp_localize_script . Auf beiden blog-functions.php & portfolio-functions.php .

Das Problem war mit dem $ object_name , also habe ich es vor ajaxurl eindeutig gemacht . Unten ist mein aktualisierter Code.

Blog-functionen.php

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

Portfolio-functionen.php

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

jQuery Variable für jeden Ajax $ Object_Name

Blog-Skripte.jspostAjax.ajaxurl

Portfolio-Skripte.jsportfolioAjax.ajaxurl