it-swarm.com.de

Echo alle Metaschlüssel eines benutzerdefinierten Beitragstyps

Gibt es eine Möglichkeit, eine Liste aller Metaschlüssel zu erstellen, die von allen Beiträgen eines benutzerdefinierten Beitragstyps verwendet werden?

Das heißt, ein nach dem Typ benanntes Lebensmittel, jedes Lebensmittel (Schinken, Spaghetti, Huhn) kann einen anderen Metaschlüssel haben, der dynamisch generiert wird. Ich kann nicht wissen, welche Metaschlüssel hinzugefügt wurden, möchte aber eine Liste aller verwenden können.

3
marctain

Mit einer einfachen Abfrage können Sie eine eindeutige Liste der vom Benutzer eingegebenen meta_keys für einen bestimmten Beitragstyp abrufen und die Ergebnisse mit der Transients-API zwischenspeichern. Die Metaschlüssel aus dieser Abfrage sind diejenigen, die nicht mit einem Unterstrich oder einer Zahl beginnen.

function generate_foods_meta_keys(){
    global $wpdb;
    $post_type = 'foods';
    $query = "
        SELECT DISTINCT($wpdb->postmeta.meta_key) 
        FROM $wpdb->posts 
        LEFT JOIN $wpdb->postmeta 
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id 
        WHERE $wpdb->posts.post_type = '%s' 
        AND $wpdb->postmeta.meta_key != '' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[_0-9].+$)' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[0-9]+$)'
    ";
    $meta_keys = $wpdb->get_col($wpdb->prepare($query, $post_type));
    set_transient('foods_meta_keys', $meta_keys, 60*60*24); # create 1 Day Expiration
    return $meta_keys;
}

Verwenden Sie die folgende Funktion, um eine Liste von meta_keys in Ihrer Vorlage zum Generieren Ihres Dropdowns abzurufen:

function get_foods_meta_keys(){
    $cache = get_transient('foods_meta_keys');
    $meta_keys = $cache ? $cache : generate_foods_meta_keys();
    return $meta_keys;
}

$meta_keys = get_foods_meta_keys();
8
Brian Fegter

Ich glaube, Sie müssten zuerst eine Abfrage durchführen, um alle Metaschlüssel für alle benutzerdefinierten Beitragstypen in einem Array zusammenzustellen. So etwas in der Art:

$args = array(
    'post_type' => 'custom-post-type-name',
    );
$cpts = new WP_Query($args);
if($cpts->have_posts()) : while($cpts->have_posts() ) : $cpts->the_post();
    $meta_values[] = get_post_meta($post->ID);
endwhile; endif;

Alle Ihre Meta-Werte werden in einem $meta_values-Array gespeichert.

Sie können eine var_dump($meta_values) ausführen, um den Inhalt des Arrays zu überprüfen.

1
Aaron Holbrook

Verwenden Sie get_post_custom , um alle Schlüssel und Werte abzurufen.

Es gibt auch eine Funktion namens get_post_custom_keys() , mit der Sie alle Metaschlüssel abrufen können.

0
KeepMove