it-swarm-eu.dev

Vrátit všechna vlastní meta data pro jeden vlastní typ příspěvku

Nastavil jsem vlastní typ příspěvku, který má tři vlastní meta pole: jméno, zeměpisná šířka, délka. Každý příspěvek již zobrazuje název na integrované mapě na základě zeměpisné šířky a délky.

Nyní bych chtěl přidat stránku na mé stránky, která zobrazuje VŠECHNY jména na mapě na základě jejich zeměpisné šířky a délky.

Zřejmě vím, jak se dostat jednotlivé hodnoty ven a dostat je na mapu, ale nejsem tak zkušený ve Wordpressu, takže si nejsem jistý, jaký je nejlepší způsob, jak dostat všechny tyto informace ve strukturované podobě pro to, co jsem Snažím se to udělat. Jakékoli ukazatele, které by mi pomohly začít, by byly oceněny.

4
WouterB

Pokud všechny vaše vlastní příspěvky typu příspěvků mají všechna meta pole, která potřebujete, můžete použít argument fields a nastavit ho na ids, který bude fungovat mnohem rychleji, například:

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

Tento kód vám poskytne všechny příspěvky s přiřazenou zeměpisnou délkou, šířkou a názvem. Pak můžete procházet přes ně dělat svůj výstup a podobně.

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

Samozřejmě, že to budete potřebovat modifikovat, a doporučuji přečíst si dokumentaci WP_Query abych to naladil přesně tak, jak chcete, ale to vám to udělá. Pokud to použijete na šabloně, celá věc by měla být hračka.

7
mor7ifer

Proč nepoužívat get_metadata () ?

Pokud předáte správné parametry, získáte všechny meta atributy příspěvku (vlastní nebo ne).

Příklad:

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

Všimněte si, že jsem nepoužíval můj název stroje cpt jako první parametr; musíte použít 'post' nebo funkce vrátí nic.

Nastavení třetího parametru (meta key) na prázdný řetězec, kterému říkáte funkci pro načtení všech meta atributů příspěvku.

3
Marco Panichi

Toto je nejlepší způsob, jak získat meta hodnoty v uživatelských typech příspěvků zahrnout tento kód do function.php to zahrnuje metaval pole k odezvě včetně všech meta hodnot

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