web-dev-qa-db-ja.com

1つのカスタム投稿タイプのカスタムメタデータをすべて返します

名前、緯度、経度の3つのカスタムメタフィールドを持つカスタム投稿タイプを設定しました。各投稿はすでに緯度と経度に基づいて統合マップに名前を表示しています。

私は今私のサイトに緯度と経度に基づいて地図上のすべての名前を表示するページを追加したいと思います。

私は明らかに単一の値を取り出して地図に表示する方法を知っていますが、私はWordpressの経験が少ないので、私の目的のために構造化された方法ですべての情報を取り出すしようとしています。私を始めてもらうためのどんなポインタでも評価されるでしょう。

4
WouterB

すべてのカスタム投稿タイプの投稿に、必要なメタフィールドがすべて含まれている場合は、fields引数を使用してidsに設定すると、はるかに速く動作します。

//get your custom posts ids as an array
$posts = get_posts(array(
    'post_type'   => 'your_post_type',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'fields' => 'ids'
    )
);
//loop over each post
foreach($posts as $p){
    //get the meta you need form each post
    $long = get_post_meta($p,"longitude-key",true);
    $lati = get_post_meta($p,"latitude-key",true);
    $name = get_post_meta($p,"name-key",true);
    //do whatever you want with it
}
5
Bainternet

このコードは、経度、緯度、名前が割り当てられたすべての投稿を表示します。それからあなたはあなたの出力などをするためにそれらをループすることができます。

$args = array(
    // basics
    'post_type'   => 'your_post_type',
    'post_status' => 'publish',

    // meta query
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'     => 'longitude-key',
            'value'   => '',
            'compare' => 'NOT'
        ),
        array(
            'key'     => 'latitude-key',
            'value'   => '',
            'compare' => 'NOT'
        ),
        array(
            'key'     => 'name-key',
            'value'   => '',
            'compare' => 'NOT'
        ),
    )
);
$posts = new WP_Query( $args );

当然それを修正する必要があるでしょう、そして WP_Queryドキュメント を読んでそれをあなたが望むように正確に調整することを強くお勧めします、しかしそれはあなたのためにそれをするでしょう。あなたがテンプレートでそれを使用するならば、全体はケーキであるべきです。

7
mor7ifer

なぜ get_metadata() を使わないのですか?

適切なパラメータを渡すと、投稿のすべてのメタ属性(カスタムかどうかにかかわらず)を取得できます。

例:

$META_ATTRIBUTES = get_metadata( 'post', get_the_ID(), '', true );

最初のパラメータとしてcptマシン名を使用しなかったことに注意してください。 'post'を使用する必要があります または関数は何も返しません。

3番目のパラメータ(meta key)を空の文字列に設定して、投稿のすべてのメタ属性を取得するように関数に指示しています。

3
Marco Panichi

これは、カスタム投稿タイプでメタ値を取得するための最良の方法です。このコードは function.php に含まれています。

add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

 // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
 register_rest_field( 'tour', 'metaval', array(
 'get_callback' => 'get_post_meta_for_api',
 'schema' => null,
 )
 );
}

function get_post_meta_for_api( $object ) {
 //get the id of the post object array
 $post_id = $object['id'];

 //return the post meta
 return get_post_meta( $post_id );
}
0
Nuwan