web-dev-qa-db-ja.com

複数のカスタムフィールドを取得して表示する AJAX

データベースからカスタムフィールドの値を取得してページに表示しようとしています。私は単一のカスタムフィールドでそれを行うことができますが、一度に複数の値でそれを行う方法がわからない。

これが価格カスタムフィールドの最新の値を取得するための私の関数です。

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

そしてこれがJavaScriptです。

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

これは1つのフィールドでも動作しますが、フロントエンドで〜10のフィールドを更新する必要があります。10の各フィールドに同様のPHP関数を追加するとうまくいくことはわかっています。それ。

get_post_meta( get_the_ID() );を使用してPHP配列内のすべてのメタキーを取得できますが、そこから移動して次のHTMLタグを更新する方法を説明します。

<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

JsからPHPにデータを戻す最も簡単な方法は、 json_encode またはWPでは wp_send_jsonwp_send_json_error 、および wp_send_json_success を使用することです。

使用例

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

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