{"id":24547,"date":"2021-05-20T12:46:00","date_gmt":"2021-05-20T09:46:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24547"},"modified":"2021-10-18T02:40:34","modified_gmt":"2021-10-17T23:40:34","slug":"so-laden-sie-wordpress-posts-mit-ajax","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-laden-sie-wordpress-posts-mit-ajax\/","title":{"rendered":"So laden Sie WordPress-Posts mit AJAX"},"content":{"rendered":"<p>Ich betreibe einen <a href=\"https:\/\/www.youtube.com\/channel\/UCosi8Kv8-EPLt5TBJLlsWJA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">YouTube-Kanal, auf<\/a> dem ich Videos zu Programmierung und Software poste. K\u00fcrzlich hat mich einer der Abonnenten gefragt, wie man WordPress-Beitr\u00e4ge mit AJAX l\u00e4dt. Als Antwort auf ihn beschloss ich, einen Beitrag zu seiner Frage zu schreiben. In diesem Artikel untersuchen wir also, wie Sie WordPress-Posts mit AJAX laden, indem Sie eine Schaltfl\u00e4che zum Laden von mehr und einen Seitenscroll verwenden.<\/p>\n<p>Der Unterschied zwischen dem Laden mehr und einem Seitenscrollen ist recht einfach. Wenn Sie die Schaltfl\u00e4che &quot;Mehr laden&quot; verwenden, m\u00fcssen Sie auf eine Schaltfl\u00e4che klicken, um die n\u00e4chsten Beitr\u00e4ge anzuzeigen. Und wenn Sie beim Seitenscrollen zum Ende eines Ansichtsfensters scrollen, sollte der n\u00e4chste Satz von Beitr\u00e4gen automatisch geladen werden.<\/p>\n<p>Nehmen wir an, Sie haben ein paar Beitr\u00e4ge und m\u00fcssen beim Laden der Seite 2 Beitr\u00e4ge anzeigen und dann durch Klicken auf &quot;Mehr laden&quot; oder &quot;Seitenscrollen&quot; die n\u00e4chsten 2 Beitr\u00e4ge anzeigen. Dieser Vorgang wird fortgesetzt, bis alle Ihre Beitr\u00e4ge angezeigt werden.<\/p>\n<p>Erstellen Sie eine neue Seite namens &#8218;Blog&#8216;. Um Ihre Beitr\u00e4ge auf der Blog-Seite anzuzeigen, erstellen Sie eine benutzerdefinierte Vorlage <code>page-blog.php<\/code>im Verzeichnis Ihres aktiven Themas.<\/p>\n<p>Wenn Benutzer Ihre Blog-Seite besuchen, sollten sie jetzt 2 Beitr\u00e4ge sehen. F\u00fcgen Sie also den folgenden Code in Ihre benutzerdefinierte Vorlagendatei ein.<\/p>\n<pre><code>&lt;div class=\"entry-content\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;?php\n\u00a0\u00a0\u00a0\u00a0$args = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_type' =&gt; 'post',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'posts_per_page' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'paged' =&gt; 1,\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0$blog_posts = new WP_Query( $args );\n\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;?php if ($blog_posts-&gt;have_posts() ): ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"blog-posts\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php while ($blog_posts-&gt;have_posts() ): $blog_posts-&gt;the_post(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php the_excerpt(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php endwhile; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"loadmore\"&gt;Load More...&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;?php endif; ?&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Hier habe ich den &#8218;paged&#8216;-Schl\u00fcssel verwendet und ihm den Wert &#8218;1&#8216; \u00fcbergeben. &#8218;paged&#8216; ist ein Schl\u00fcssel, der in WordPress verwendet wird, wenn es um Paginierung geht. &#8218;paged&#8216; =&gt; 1 bedeutet die erste Seite.<\/p>\n<p>Sie w\u00fcrden das div-Element mit der Klasse &#8218;loadmore&#8216; bemerken. Wenn Sie auf Mehr laden klicken, geben wir einen Ajax-Aufruf ab und erhalten die n\u00e4chsten Beitr\u00e4ge.<\/p>\n<h3>Laden Sie WordPress-Beitr\u00e4ge mit Ajax \u00fcber die Schaltfl\u00e4che \u201eMehr laden&#8220;<\/h3>\n<p>Um einen Ajax-Aufruf zu t\u00e4tigen, m\u00fcssen Sie die JS-Datei in die WordPress-Umgebung einbinden. Erstellen Sie eine <code>custom.js<\/code>Datei im <code>js<\/code>Verzeichnis und f\u00fcgen Sie dann den folgenden Code in die <code>functions.php<\/code>Datei ein.<\/p>\n<pre><code>function blog_scripts() {\n\u00a0\u00a0\u00a0\u00a0\/\/ Register the script\n\u00a0\u00a0\u00a0\u00a0wp_register_script( 'custom-script', get_stylesheet_directory_uri(). '\/js\/custom.js', array('jquery'), false, true );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Localize the script with new data\n\u00a0\u00a0\u00a0\u00a0$script_data_array = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ajaxurl' =&gt; admin_url( 'admin-ajax.php' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security' =&gt; wp_create_nonce( 'load_more_posts' ),\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0wp_localize_script( 'custom-script', 'blog', $script_data_array );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Enqueued script with localized data.\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_script( 'custom-script' );\n}\nadd_action( 'wp_enqueue_scripts', 'blog_scripts' );<\/code><\/pre>\n<p>Als n\u00e4chstes schreiben wir ein wenig jQuery und geben einen Ajax-Aufruf ab, der im Gegenzug die n\u00e4chsten Beitr\u00e4ge liefert.<\/p>\n<p><strong>custom.js<\/strong><\/p>\n<pre><code>var page = 2;\njQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0$('body').on('click', '.loadmore', function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action': 'load_posts_by_ajax',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'page': page,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security': blog.security\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(blog.ajaxurl, data, function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($.trim(response) != '') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.blog-posts').append(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0page++;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.loadmore').hide();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\n});<\/code><\/pre>\n<p>Was wir hier tun, ist, dass ich eine Javascript-Variable &#8218;page&#8216; mit dem Anfangswert 2 genommen habe, da wir mit der Paginierung der zweiten Seite beginnen werden. Ich inkrementiere diese Variable &quot;Seite&quot;, nachdem ich die Ajax-Antwort erhalten habe. Nachdem ich die Antwort erhalten habe, h\u00e4nge ich sie an die Liste der vorhandenen Beitr\u00e4ge an.<\/p>\n<p>Ich habe auch den Aktionsparameter als &#8218;load_posts_by_ajax&#8216; f\u00fcr einen Ajax-Aufruf verwendet, der WordPress-Aktionen zugeordnet werden muss. \u00d6ffnen Sie Ihre <code>functions.php<\/code>Datei und f\u00fcgen Sie den folgenden Code zu einer Datei hinzu.<\/p>\n<pre><code>add_action('wp_ajax_load_posts_by_ajax', 'load_posts_by_ajax_callback');\nadd_action('wp_ajax_nopriv_load_posts_by_ajax', 'load_posts_by_ajax_callback');<\/code><\/pre>\n<p>In obigen WordPress-Aktionen rufen wir die Callback-Funktion auf, <code>load_posts_by_ajax_callback<\/code>die ich im n\u00e4chsten Schritt definieren werde. Sie k\u00f6nnen diese Funktion in Ihrer <code>functions.php<\/code>.<\/p>\n<pre><code>function load_posts_by_ajax_callback() {\n\u00a0\u00a0\u00a0\u00a0check_ajax_referer('load_more_posts', 'security');\n\u00a0\u00a0\u00a0\u00a0$paged = $_POST['page'];\n\u00a0\u00a0\u00a0\u00a0$args = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_type' =&gt; 'post',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'posts_per_page' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'paged' =&gt; $paged,\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0$blog_posts = new WP_Query( $args );\n\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;?php if ($blog_posts-&gt;have_posts() ): ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php while ($blog_posts-&gt;have_posts() ): $blog_posts-&gt;the_post(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php the_excerpt(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php endwhile; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php\n\u00a0\u00a0\u00a0\u00a0endif;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0wp_die();\n}<\/code><\/pre>\n<p>Wenn Sie jetzt auf die Schaltfl\u00e4che &quot;Mehr laden&quot; klicken, werden die n\u00e4chsten Beitr\u00e4ge \u00fcber Ajax geladen und als Antwort zur\u00fcckgegeben. Der oben geschriebene JavaScript-Code w\u00fcrde den Rest erledigen.<\/p>\n<h3>Laden Sie WordPress-Beitr\u00e4ge mit Ajax beim Seitenscrollen<\/h3>\n<p>Einige Benutzer m\u00f6chten m\u00f6glicherweise keine Schaltfl\u00e4che zum Laden mehr, um die Beitr\u00e4ge mit Ajax anzuzeigen. Stattdessen ziehen sie es vor, dass die Beitr\u00e4ge angezeigt werden, sobald der Benutzer das Ende eines Ansichtsfensters erreicht.<\/p>\n<p>Um dies zu erreichen, m\u00fcssen Sie eine Logik schreiben, die das Ereignis am Ende eines Ansichtsfensters erfasst. Der Rest des Codes entspricht der Schaltfl\u00e4che &quot;Mehr laden&quot;. Unten ist der jQuery-Code f\u00fcr den Seitenscroll.<\/p>\n<pre><code>jQuery(window).scroll(function($) {\n\u00a0\u00a0\u00a0\u00a0if (jQuery(window).scrollTop() + jQuery(window).height() &gt; jQuery(document).height()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action': 'load_posts_by_ajax',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'page': page,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security': blog.security\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(blog.ajaxurl, data, function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($.trim(response) != '') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.blog-posts').append(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0page++;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.loadmore').hide();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0}\n});<\/code><\/pre>\n<p>Das ist es! Sie k\u00f6nnen weitermachen und es versuchen. Ich w\u00fcrde gerne Ihre Gedanken und Vorschl\u00e4ge in den Kommentaren unten erfahren.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-integrieren-sie-den-ajax-datei-upload-in-wordpress\/\" title=\"So integrieren Sie den Ajax-Datei-Upload in WordPress\">So integrieren Sie den Ajax-Datei-Upload in WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-verwenden-sie-jquery-ajax-in-wordpress\/\" title=\"So verwenden Sie jQuery Ajax in WordPress\">So verwenden Sie jQuery Ajax in WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heutzutage ist es sehr \u00fcblich, WordPress-Posts mit AJAX zu laden. WordPress bietet es standardm\u00e4\u00dfig nicht an. In diesem Tutorial erkl\u00e4ren wir, wie Sie diese Aufgabe handhaben.<\/p>\n","protected":false},"author":1,"featured_media":21653,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[607],"tags":[845],"class_list":["post-24547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-3","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/24547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=24547"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/24547\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/21653"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=24547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=24547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=24547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}