web-dev-qa-db-fra.com

Récupérer et afficher plusieurs champs personnalisés via AJAX

J'essaie d'extraire les valeurs de champ personnalisées de la base de données et de les afficher à la page. Je suis capable de le faire pour un seul champ personnalisé mais je ne sais pas comment le faire avec plusieurs valeurs à la fois.

Voici ma fonction pour obtenir la dernière valeur du champ personnalisé de prix.

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

Et c'est le JavaScript.

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

Cela fonctionne pour un champ mais je dois mettre à jour environ 10 champs sur le front-end et je sais que l'ajout de fonctions PHP similaires pour chacun des 10 champs peut faire l'affaire mais je ne pense pas que ce soit un moyen efficace de le faire. cette.

Nous pouvons obtenir toutes les clés méta dans le tableau PHP avec get_post_meta( get_the_ID() ); mais comment y aller et mettre à jour les balises HTML suivantes.

<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

Pour transmettre les données de js à PHP, le plus simple est d'utiliser json_encode ou, dans WP, ses wrappers wp_send_json , wp_send_json_error et wp_send_json_success .

Exemple d'utilisation:

Du côté PHP

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

Côté js

$(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