Ich habe einen benutzerdefinierten Beitragstyp erstellt. Es wird problemlos im WordPress-Dashboard geladen und ich kann es auch speichern. Nehmen wir nun an, es handelt sich um einen benutzerdefinierten Beitragstyp, der Daten für einige Zeichenfolgen und einige Datumsangaben enthält.
Ich möchte in der Lage sein, diese benutzerdefinierten Beitragstypen abzurufen (was ich mit WP_Query getan und den post_type für den Namen meines benutzerdefinierten Beitragstyps angegeben habe). Wenn ich print_r für das zurückgegebene Objekt aufrufe, werden nirgendwo im Objekt die benutzerdefinierten Daten (Zeichenfolgen und Daten) gespeichert. Wie würde ich diese aus der Datenbank abrufen?
Ich habe mich stundenlang umgesehen und keinen Ansatz gefunden, um diese Daten abzurufen.
Auf Wunsch: So werden die Daten gespeichert:
function update_obituary(){
global $post;
update_post_meta($post->ID, "first_name", $_POST["first_name"]);
update_post_meta($post->ID, "last_name", $_POST["last_name"]);
update_post_meta($post->ID, "birth_date", $_POST["birth_date"]);
update_post_meta($post->ID, "death_date", $_POST["death_date"]);
update_post_meta($post->ID, "publication_date", $_POST["publication_date"]);
}
Diese Funktion ist an den ‚save_post‘-Hook gebunden. Die Daten werden erneut angezeigt, wenn ich die benutzerdefinierte Beitragstypinstanz im Bearbeitungsmodus erneut öffne. Das bedeutet, dass es in der Datenbank gespeichert ist, richtig?
Wenn die Metadaten beim Bearbeiten von Beiträgen des Typs angezeigt werden, müssen sie erfolgreich in der DB gespeichert worden sein.
Es gibt zwei wp-Funktionen, um die Metadaten des benutzerdefinierten Beitragstyps abzurufen: get_post_custom_values
und get_post_meta
. Der Unterschied ist, dass get_post_custom_values
kann auf nicht eindeutige benutzerdefinierte Felder zugreifen, dh solche mit mehr als einem Wert, der einem einzelnen Schlüssel zugeordnet ist. Sie können es aber auch für einzelne Felder verwenden – Geschmacksfrage.
Angenommen, Ihr Beitragstyp heißt “Nachruf”:
// First lets set some arguments for the query:
// Optionally, those could of course go directly into the query,
// especially, if you have no others but post type.
$args = array(
'post_type' => 'obituary',
'posts_per_page' => 5
// Several more arguments could go here. Last one without a comma.
);
// Query the posts:
$obituary_query = new WP_Query($args);
// Loop through the obituaries:
while ($obituary_query->have_posts()) : $obituary_query->the_post();
// Echo some markup
echo '<p>';
// As with regular posts, you can use all normal display functions, such as
the_title();
// Within the loop, you can access custom fields like so:
echo get_post_meta($post->ID, 'birth_date', true);
// Or like so:
$birth_date = get_post_custom_values('birth_date');
echo $birth_date[0];
echo '</p>'; // Markup closing tags.
endwhile;
// Reset Post Data
wp_reset_postdata();
Ein Wort der Vorsicht, um Verwirrung zu vermeiden: Lassen Sie den booleschen Wert in get_post_meta
wird es ein Array statt einer Zeichenfolge zurückgeben. get_post_custom_values
gibt immer ein Array zurück, weshalb wir im obigen Beispiel das echoen $birth_date[0]
statt $birth_date
.
Auch bin ich mir im Moment nicht 100%ig sicher, ob $post->ID
wird wie oben beschrieben funktionieren. Wenn nicht, ersetzen Sie es durch get_the_ID()
. Beides sollte funktionieren, eines wird es sicher. Könnte das testen, spare mir aber die Zeit…
Überprüfen Sie der Vollständigkeit halber den Codex auf WP_Query
für weitere Abfrageargumente und korrekte Verwendung.
Bitte fügen Sie einen Code hinzu. Wie werden die zusätzlichen Metadaten gespeichert?
– Johannes Pille
4. November 2011 um 20:16 Uhr