名前、緯度、経度の3つのカスタムメタフィールドを持つカスタム投稿タイプを設定しました。各投稿はすでに緯度と経度に基づいて統合マップに名前を表示しています。
私は今私のサイトに緯度と経度に基づいて地図上のすべての名前を表示するページを追加したいと思います。
私は明らかに単一の値を取り出して地図に表示する方法を知っていますが、私はWordpressの経験が少ないので、私の目的のために構造化された方法ですべての情報を取り出すしようとしています。私を始めてもらうためのどんなポインタでも評価されるでしょう。
すべてのカスタム投稿タイプの投稿に、必要なメタフィールドがすべて含まれている場合は、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
}
このコードは、経度、緯度、名前が割り当てられたすべての投稿を表示します。それからあなたはあなたの出力などをするためにそれらをループすることができます。
$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
ドキュメント を読んでそれをあなたが望むように正確に調整することを強くお勧めします、しかしそれはあなたのためにそれをするでしょう。あなたがテンプレートでそれを使用するならば、全体はケーキであるべきです。
なぜ get_metadata() を使わないのですか?
適切なパラメータを渡すと、投稿のすべてのメタ属性(カスタムかどうかにかかわらず)を取得できます。
例:
$META_ATTRIBUTES = get_metadata( 'post', get_the_ID(), '', true );
最初のパラメータとしてcptマシン名を使用しなかったことに注意してください。 'post'を使用する必要があります または関数は何も返しません。
3番目のパラメータ(meta key)を空の文字列に設定して、投稿のすべてのメタ属性を取得するように関数に指示しています。
これは、カスタム投稿タイプでメタ値を取得するための最良の方法です。このコードは 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 );
}