web-dev-qa-db-fra.com

Renvoie toutes les métadonnées personnalisées pour un type de publication personnalisé.

J'ai configuré un type de message personnalisé comportant trois champs de méta personnalisés: nom, latitude et longitude. Chaque publication affiche déjà le nom sur une carte intégrée en fonction de sa latitude et de sa longitude.

Je voudrais maintenant ajouter une page à mon site qui montre TOUS les noms sur une carte en fonction de leur latitude et de leur longitude.

Je sais évidemment comment obtenir des valeurs uniques et les mettre sur une carte, mais je ne suis pas expérimenté dans Wordpress, je ne suis donc pas sûr de la meilleure façon de diffuser toutes ces informations de manière structurée. essaie de faire. Tous les indicateurs pour me lancer seraient appréciés.

4
WouterB

Si toutes vos publications de type publication personnalisée ont tous les champs méta dont vous avez besoin, vous pouvez utiliser l'argument fields et le définir sur ids, ce qui fonctionnera beaucoup plus rapidement, par exemple:

//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

Ce code vous donnera tous les messages avec une longitude, une latitude et un nom attribué. Ensuite, vous pouvez les parcourir en boucle pour faire votre sortie, etc.

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

Naturellement, vous allez avoir besoin de modifier cela, et je vous recommande vivement de lire la documentation WP_Query pour régler exactement ce que vous voulez, mais cela le fera pour vous. Si vous utilisez cela sur un modèle, le tout devrait être un morceau de gâteau.

7
mor7ifer

Pourquoi ne pas utiliser get_metadata () ?

Si vous transmettez correctement les paramètres, vous obtenez tous les attributs méta d’une publication (personnalisée ou non).

Exemple:

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

Notez que je n'ai pas utilisé mon nom de machine cpt comme premier paramètre; vous devez utiliser 'post' ou la fonction ne renverra rien.

En définissant le troisième paramètre (clé méta) sur une chaîne vide, vous indiquez à la fonction de récupérer tous les attributs méta de la publication.

3
Marco Panichi

C’est le meilleur moyen d’obtenir des méta-valeurs dans les types de post personnalisés. Incluez ce code dans function.php il inclut un tableau de métaval à la réponse, y compris toutes les méta-valeurs.

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