Holen Sie sich eine Liste aller benutzerdefinierten Felder für das gesamte Blog

Wie der Titel schon sagt, möchte ich, dass eine einzelne function eine aggregierte Liste aller benutzerdefinierten Felder für die gesamte Site erhält (alle Posts, Seiten, CPTs). Normalerweise tue ich dies mit ein paar SQL-statementen und jongliere die Ergebnisse, aber ich frage mich, ob jemand eine eher kernorientierte Art und Weise hat, dies zu tun. Meistens wollte ich etwas, das online verfügbar und leicht zu finden ist, für jemanden, der danach sucht.

Hier ist die SQL, die ich normalerweise verwende:

SELECT DISTINCT `meta_key` FROM `prefix_postmeta` WHERE `meta_key` NOT LIKE "\_%" 

Hier ist eine function, um die einzelnen Felder einer einzelnen Seite oder Posts zu ziehen:

 $custom_fields = get_post_custom($post->ID); foreach ( $custom_fields as $field_key => $field_values ) { if ( ! isset( $field_values[0] ) ) continue; if ( in_array( $field_key, array( "_edit_lock", "_edit_last" ) ) ) continue; echo $field_key . '=>' . $field_values[0]; } 

Also im Grunde, ich möchte eine einmalige function, die ich in functions.php bleiben functions.php und aufrufen, wenn ich eine aktuelle Ausschneiden / Einfügen-Liste aller meiner benutzerdefinierten Felder für ein Plugin, dass Sie sie alle auflisten müssen mit der Hand – Broken Link Checker, zum Beispiel.

Solutions Collecting From Web of "Holen Sie sich eine Liste aller benutzerdefinierten Felder für das gesamte Blog"

Die folgende function speichert eine eindeutige Liste aller benutzerdefinierten Felder für die Liste der Posts / Seiten / benutzerdefinierten Posts, die in den Schlüsseln des Arrays $customfields . Die Array-Werte sind die Anzahl der Posts mit dem entsprechenden Feld. Im Beispiel werden benutzerdefinierte Felder, die von Plugins hinzugefügt wurden, ausgeschlossen ( $value[0] != '_'; ), Aber diese könnten einfach wieder hinzugefügt werden.

 function all_custom_fields($allposts) { foreach ( $allposts as $post ) : setup_postdata($post); $post_id = $post->ID; $fields = get_post_custom_keys($post_id); // all keys for post as values of array if ($fields) { foreach ($fields as $key => $value) { if ($value[0] != '_') { // exclude where added by plugin $customfields[$value] = isset($customfields[$value]) ? $customfields[$value] + 1 : 1; } } } endforeach; wp_reset_postdata(); return $customfields; } // example - all post types, whether published or not $args = array( 'post_status' => array('publish','draft','pending','future'), 'post_type' => 'any', 'posts_per_page' => -1, ); $allposts = get_posts($args); $customfields = all_custom_fields($allposts);