it-swarm.com.de

Gibt alle benutzerdefinierten Metadaten für einen benutzerdefinierten Beitragstyp zurück

Ich habe einen benutzerdefinierten Beitragstyp eingerichtet, der drei benutzerdefinierte Metafelder enthält: Name, Breitengrad, Längengrad. Jeder Beitrag zeigt bereits den Namen auf einer integrierten Karte basierend auf dem Längen- und Breitengrad an.

Jetzt möchte ich meiner Site eine Seite hinzufügen, auf der ALLE Namen auf einer Karte basierend auf ihrem Breiten- und Längengrad angezeigt werden.

Ich weiß natürlich, wie man einzelne Werte herausholt und auf eine Karte schreibt, aber ich bin nicht so erfahren in Wordpress, daher bin ich mir nicht sicher, wie ich all diese Informationen am besten strukturiert herausholen kann versuche es zu tun. Alle Hinweise, um mich anzufangen, wäre dankbar.

4
WouterB

Wenn alle Ihre benutzerdefinierten Posts alle von Ihnen benötigten Metafelder enthalten, können Sie das Argument fields verwenden und es auf ids setzen, was zum Beispiel viel schneller funktioniert:

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

Mit diesem Code erhalten Sie alle Posts, denen Längengrad, Breitengrad und Name zugewiesen wurden. Dann können Sie sie durchlaufen, um Ihre Ausgabe und so weiter zu machen.

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

Natürlich müssen Sie das ändern, und ich empfehle nachdrücklich, die WP_Query -Dokumentation zu lesen, um genau das zu tun, was Sie wollen, aber das wird es für Sie tun. Wenn Sie das für eine Vorlage verwenden, sollte das Ganze ein Kinderspiel sein.

7
mor7ifer

Warum nicht get_metadata () verwenden?

Wenn Sie die richtigen Parameter übergeben, erhalten Sie alle Metaattribute eines Posts (benutzerdefiniert oder nicht).

Beispiel:

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

Beachten Sie, dass ich meinen cpt-Computernamen nicht als ersten Parameter verwendet habe. Sie müssen 'post' verwenden oder die Funktion gibt nichts zurück.

Setzen Sie den dritten Parameter (Metaschlüssel) auf eine leere Zeichenfolge, die Sie der Funktion zum Abrufen aller Metaattribute des Posts mitteilen.

3
Marco Panichi

Dies ist die beste Methode, um Metawerte in benutzerdefinierten Beitragstypen abzurufen. Fügen Sie diesen Code in function.php it include metaval ein, um auf alle Metawerte zu antworten

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