WordPress – wie kann ich mehr Beiträge über AJAX abrufen?

Lesezeit: 5 Minuten

Wordpress wie kann ich mehr Beitrage uber AJAX abrufen
martincarlin87

Zunächst einmal denke ich, dass dies ein langer Weg ist, aber hoffentlich gibt es jemanden da draußen, der helfen kann.

Um die aktuelle Situation zu erklären, habe ich im Moment ein benutzerdefiniertes Plugin, das verschiedene Informationen über einen Benutzer und seine 4 neuesten Beiträge erfasst.

Ich verwende auch das WPBook-Plugin (das ist also auf Facebook und nur eine typische WordPress-Site)

Ok, hier ist also mein Code, der die 4 neuesten Posts für einen Benutzer erfasst:

// The Query
query_posts('posts_per_page=4&author=".$blogger_id);

// set $more to 0 in order to only get the first part of the post
global $more;
$more = 0;

// the Loop
while (have_posts()) : the_post();
?>
    <div class="oe-grid-box">
        <a href="https://stackoverflow.com/questions/11887760/<?php%20the_permalink()%20?>" <?php the_title()?></a>
        <div class="oe-grid-box-content">
            <?php echo the_content( "...' ); ?>
        </div>
        <div class="oe-grid-pic">
            <a href="https://stackoverflow.com/questions/11887760/<?php%20the_permalink()%20?>">
                <span class="<?php echo strtolower($category); ?>"></span>
            </a>
            <?php echo $image; ?>
        </div>
    </div>
<?php
endwhile;

// Reset Query
wp_reset_query();
?>


<div id="load-more">Load More</div>

Ich habe versucht, diesem Tutorial zu folgen, aber anstelle eines separaten Plugins den Code in mein vorhandenes Plugin zu platzieren, aber jetzt wird meine Seite nicht geladen:

http://www.problogdesign.com/wordpress/load-next-wordpress-posts-with-ajax/

Im Idealfall möchte ich, wenn auf die Schaltfläche „Mehr laden“ geklickt wird, vier weitere Beiträge abrufen und anzeigen.

Wenn jemand helfen könnte, würde ich es wirklich schätzen.

AKTUALISIEREN

OK,

Bisher habe ich in meiner jQuery hinzugefügt, um die PHP-Datei aufzurufen, die hoffentlich Beiträge zurückgeben sollte, aber es funktioniert nicht.

Ich denke, es liegt daran, dass es nicht weiß, was die WordPress-Funktionen sind?

Wenn ich ein einfaches setze echo In meinem Skript zum Laden von mehr zeigt die jQuery-Erfolgsfunktion eine Warnung an, dass es funktioniert hat, aber wenn ich anfange, WordPress-Sachen zu machen, erhalte ich einen internen Serverfehler. Dies ist der Code in der Datei load-more.php:

// load wordpress into template
$path = $_SERVER['DOCUMENT_ROOT'];
define('WP_USE_THEMES', false);
require($path .'/wp-load.php');


$blogger_id = $_GET['id'];
$firstname  = $_GET['firstname'];
$surname    = $_GET['surname'];
$posts      = $_GET['posts'] + 4;
$category   = $_GET['category'];
$image      = $_GET['image'];

// The Query
query_posts('paged='.get_query_var('paged').'&posts_per_page=" . $posts . "&author=".$blogger_id);

// set $more to 0 in order to only get the first part of the post
global $more;
$more = 0;

// then the same loop as in my page that is making the ajax call.

  • Hmm, ich würde jQuery und diesen Beitrag verwenden, um die richtigen Beiträge zu ziehen: scribu.net/wordpress/wp-pagenavi/…

    – Jeremy

    9. August 2012 um 16:46 Uhr

  • Wenn Sie sagen, dass die Seite nicht geladen wird, was meinen Sie damit? Zeigt es einige Fehlermeldungen an?

    – Wladimir Kadalaschwili

    9. August 2012 um 16:49 Uhr

  • @VladimirKadalashvili – ja, die Seite bricht um, es werden zwar keine Fehlermeldungen angezeigt, aber das liegt wahrscheinlich daran, dass ich die Fehlerberichterstattung nicht aktiviert habe.

    – martincarlin87

    10. August 2012 um 8:08 Uhr

  • @Jeremy danke, ich werde es versuchen und sehen, was passiert!

    – martincarlin87

    10. August 2012 um 8:10 Uhr

Wordpress wie kann ich mehr Beitrage uber AJAX abrufen
martincarlin87

Nach viel Mühe habe ich die Antwort gefunden, hier ist eine Lösung für diejenigen, die in der gleichen Position stecken.

Dies geht auf Ihre Plugin-Seite, wo Sie Beiträge für einen Benutzer usw. erhalten.

<script type="text/javascript">
    $(document).ready(function() {

        posts = 8;
        author_posts = parseInt(<?php echo $author_posts; ?>);

        $("#link_selector").click(function() {

            // alert("posts - ' + posts + 'author posts - ' + author_posts);


            if ((posts - author_posts) > 3) {
                $("#link_selector").text('No more posts!');
            }
            else {

                var category        = '<?php echo strtolower($category); ?>';
                var id              = '<?php echo $blogger_id; ?>';
                var firstname="<?php echo $firstname; ?>";
                var surname="<?php echo $surname; ?>";


                // alert(posts + category + id + firstname + surname);

                $.ajax({
                    type: "GET",
                    url: "/wordpress/wp-admin/admin-ajax.php",
                    dataType: 'html',
                    data: ({ action: 'loadMore', id: id, firstname: firstname, surname: surname, posts: posts, category: category}),
                    success: function(data){
                        $('#ajax_results_container').hide().fadeIn('slow').html(data);
                        posts = posts + 4;

                        if ((posts - author_posts) > 3) {
                            $("#link_selector").text('No more posts!');
                        }

                    }
                });
            }

        });
    });

    </script>       

Fügen Sie dann in der functions.php Ihres Themas Ihre Funktion ein, um Ihre Ajax-Anfrage auszuführen:

function loadMore() {

    $blogger_id = $_GET['id'];
    // get your $_GET variables sorted out

    // setup your query to get what you want
    query_posts('posts_per_page=" . $posts . "&author=".$blogger_id);

    // initialsise your output
    $output = "';

    // the Loop
    while (have_posts()) : the_post();

        // define the structure of your posts markup

    endwhile;

    // Reset Query
    wp_reset_query();

    die($output);

}

Setzen Sie dann direkt nach dem Schließen Ihrer Funktion die Aktionshaken ein

add_action('wp_ajax_loadMore', 'loadMore');
add_action('wp_ajax_nopriv_loadMore', 'loadMore'); // not really needed

Das ist es!

  • Ich verstehe, dass es lange her ist..), aber sagen Sie bitte, was in dieser PHP-Datei enthalten sein soll? url: "/wordpress/wp-admin/admin-ajax.php" Und wie soll ich “die Struktur Ihres Beitrags-Markups definieren”? Einfach HTML ohne irgendetwas einfügen? Danke.

    – Maryja Piaredryj

    2. Juni 2015 um 17:44 Uhr


  • Hallo @mankutila, es ist schon eine Weile her, also fällt es mir schwer, mich zu erinnern. Ich bin sicher loadMore() geht hinein functions.php (aus Ihrem Thema) wie in der Frage angegeben, /wordpress/wp-admin/admin-ajax.php muss das irgendwie verwenden, denn wenn Sie eine WordPress-Kerndatei bearbeiten, würden Sie bei jeder Aktualisierung alle Ihre Änderungen verlieren. Das erwähnte Markup ist nur Ihr HTML, also bauen Sie es über die String-Verkettung auf, z. B. in der Schleife: $output += 'your html here';

    – martincarlin87

    2. Juni 2015 um 20:57 Uhr


  • Es bedeutet, ich sollte statt // define the structure of your posts markup `$output= ‘

    ‘ einfügen? Danke

    – Maryja Piaredryj

    2. Juni 2015 um 21:17 Uhr

  • @mankutila ja genau. Die Dinge könnten sich geändert haben, seit WordPress zwischen damals und heute einige Versionen veröffentlicht hat, aber hoffentlich sollte es immer noch funktionieren, ich habe seitdem keine WP-Sachen mehr gemacht, also bin ich nicht in der Lage zu wissen, ob die Dinge immer noch gleich sind oder nicht .

    – martincarlin87

    2. Juni 2015 um 21:34 Uhr

  • großartig! Froh, dass ich helfen konnte.

    – martincarlin87

    2. Juni 2015 um 21:41 Uhr

1005020cookie-checkWordPress – wie kann ich mehr Beiträge über AJAX abrufen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy