it-swarm.com.de

Abrufen und Anzeigen mehrerer benutzerdefinierter Felder über AJAX

Ich versuche, benutzerdefinierte Feldwerte aus der Datenbank abzurufen und auf der Seite anzuzeigen. Ich kann das für ein einzelnes benutzerdefiniertes Feld tun, bin mir aber nicht sicher, wie ich das mit mehreren Werten gleichzeitig machen soll.

Hier ist meine Funktion zum Abrufen des neuesten Werts des benutzerdefinierten Preisfelds.

function get_latest_price() {
    if ( !isset($_GET['post_id']) || empty($_GET['post_id']) ) {
        die( '0' );
    }
    $post_id = intval( filter_var( $_GET['post_id'], FILTER_SANITIZE_NUMBER_INT ) );
    if( empty($post_id) ) {
        die( '0' );
    }
    $latest_price = get_post_meta( $post_id, 'latest_price', true );
    die( strval( $latest_price ) );
}
add_action( 'wp_ajax_nopriv_ajax-get-latest-price', 'get_latest_price' );
add_action( 'wp_ajax_ajax-get-latest-price', 'get_latest_price' );

Und das ist das JavaScript.

$(document).ready( function() {
    $.ajax({
        type : "GET",
        url : ajax_object.ajaxurl,
        data : { action : "ajax-get-latest-price" },
        success: function ( result ) {
            $('span.price').html( result );
        }
    });
});

Dies funktioniert für ein Feld, aber ich muss ~ 10 Felder im Front-End aktualisieren und ich weiß, dass das Hinzufügen von ähnlichen PHP -Funktionen für jedes der 10 Felder den Job erledigen kann, aber ich denke nicht, dass es ein effizienter Weg ist Das.

Wir können alle Metaschlüssel im Array PHP mit get_post_meta( get_the_ID() ); abrufen, aber wie geht man von dort aus und aktualisiert die folgenden HTML-Tags.

<span class="price"></span>
<span class="exp-date"></span>
<span class="seller"></span>
<span class="location"></span>
...
<span class="item-10"></span>
3
Robert hue

Um Daten von js zurück an PHP zu übergeben, verwenden Sie am einfachsten json_encode oder in WP seine Wrapper wp_send_json , wp_send_json_error und wp_send_json_success .

Anwendungsbeispiel:

Auf der PHP Seite

function get_latest_product_meta() {

    $post_id = (int) filter_input(INPUT_GET, 'post_id', FILTER_SANITIZE_NUMBER_INT);
    $post_id or wp_send_json_error();

    // array_shift because when used like so `get_post_meta` return array of arrays...
    $data = array_map('array_shift', get_post_meta($post_id));
    wp_send_json_success($data);
}

Auf seiner Seite

$(document).ready( function() {
    $.ajax({
        type : "GET",
        url : ajax_object.ajaxurl,
        data : { action : "ajax-get-latest-price" },
        success: function ( result ) {
            if (result.error) {
               alert('Post not found!');
            } else if(result.success) {
               $('span.price').html( result.data.price );
               $('span.seller').html( result.data.seller);
               // and so on....
            }
        }
    });
});
4
gmazzap