it-swarm.com.de

Wie erhalte ich Post-Inhalte, indem ich ajax anrufe?

Ich arbeite an einem Plugin. Ich habe einen benutzerdefinierten Beitragstyp team. Benutzerdefinierte Beiträge haben vier Beiträge verschiedener Kategorien. Ich habe diesen Code verwendet, um die Beitrags-ID von jedem mit Ajax zu senden.

$(document).ready(function () {

        $(".post_thumbnail").click(function () {
            var id_post = $(this).attr('post_id');
            $.ajax({
                type: 'POST',
                url: "<?php echo plugin_dir_url(__FILE__).'post-content.php';?>",
                data: {
                    'post_id': id_post
                }, success: function (result) {

                   alert(result);
                },
                error: function () {
                    alert("error");
                }
            });

        });
    });

Ich sende ID erfolgreich und erhalte sie auch. Um ID zu erhalten, lautet mein Code

if(isset($_POST['post_id'])) {
    echo  $id=$_POST['post_id'];

}

aber ich kann nicht den Inhalt jedes Pfostens anzeigen. Wie kann ich den Inhalt jedes Pfostens anzeigen? Ich versuche mein Bestes, aber versage. Jede Hilfe wäre sehr dankbar

6
raxa

Zuerst sollten Sie immer die WordPress AJAX -Methoden verwenden, keine benutzerdefinierte Funktion dafür. Siehe AJAX in Plugins im Codex.

In diesem Sinne können Sie Ihre Anfrage wie folgt einrichten. Ändern Sie die AJAX URL in

<?php echo admin_url('admin-ajax.php'); ?> 

und fügen Sie die Aktion, die WordPress im nächsten Schritt ausführen soll, zu Ihren Daten hinzu.

$(".post_thumbnail").click(function () {
    var id_post = $(this).attr('post_id');
    $.ajax({
        type: 'POST',
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        data: {
            'post_id': id_post,
            'action': 'f711_get_post_content' //this is the name of the AJAX method called in WordPress
        }, success: function (result) {

           alert(result);
        },
        error: function () {
            alert("error");
        }
    });

});

Jetzt müssen wir WordPress mitteilen, was zu tun ist, wenn jemand f711_get_post_content anruft.

Registrieren Sie die Aktion in WordPress AJAX. Dies geschieht in Ihren Pluginfunktionen. Der erste Teil ('wp_ajax_') teilt WordPress mit, dass es sich um eine AJAX Aktion handelt, und der folgende Teil ist der Name der Aktion ('f711_get_post_content'). Das zweite Argument ist die Funktion, die WordPress ausführt, wenn diese Aktion aufgerufen wird.

add_action( 'wp_ajax_f711_get_post_content', 'f711_get_post_content_callback' );
// If you want not logged in users to be allowed to use this function as well, register it again with this function:
add_action( 'wp_ajax_nopriv_f711_get_post_content', 'f711_get_post_content_callback' );

Danach erstellen Sie Ihre Rückruffunktion.Denken Sie daran, IMMER Ihre AJAX Funktionen zu sterben (). Wenn Ihre Funktion JSON ausgibt, was ich empfehlen würde, können Sie Ihre Funktion mit wp_send_json( $array ); beenden, das die() eingebaut hat.

function f711_get_post_content_callback() {

    // retrieve post_id, and sanitize it to enhance security
    $post_id = intval($_POST['post_id'] );

    // Check if the input was a valid integer
    if ( $post_id == 0 ) {
        echo "Invalid Input";
        die();
    }

    // get the post
    $thispost = get_post( $post_id );

    // check if post exists
    if ( !is_object( $thispost ) ) {
        echo 'There is no post with the ID ' . $post_id;
        die();
    }

    echo $thispost->post_content; //Maybe you want to echo wpautop( $thispost->post_content );

    die();

}

Dies wäre die empfohlene JSON-Version. Sie können damit mehrere Variablen an den Client zurückgeben.

function f711_get_post_content_callback() {

    // retrieve post_id, and sanitize it to enhance security
    $post_id = intval($_POST['post_id'] );

    // Check if the input was a valid integer
    if ( $post_id == 0 ) {

        $response['error'] = 'true';
        $response['result'] = 'Invalid Input';

    } else {

        // get the post
        $thispost = get_post( $post_id );

        // check if post exists
        if ( !is_object( $thispost ) ) {

            $response['error'] = 'true';
            $response['result'] =  'There is no post with the ID ' . $post_id;

        } else {

            $response['error'] = 'false';
            $response['result'] = wpautop( $thispost->post_content );

        }

    }

    wp_send_json( $response );

}
11
fischi