Ich möchte die Titel innerhalb eines ausgewählten Elements in einer Form verwenden, die ich auf der Client-Seite wiedergebe. Was wäre der beste Weg, dies zu tun?
Ich möchte die Titel innerhalb eines ausgewählten Elements in einer Form verwenden, die ich auf der Client-Seite wiedergebe. Was wäre der beste Weg, dies zu tun?
Antworten:
Fragen Sie alle Beitragstitel eines bestimmten Beitragstyps ab
// Function that returns post titles from specific post type as form select element
// returns null if found no results.
function output_projects_list() {
global $wpdb;
$custom_post_type = 'page'; // define your custom post type slug here
// A sql query to return all post titles
$results = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type = %s and post_status = 'publish'", $custom_post_type ), ARRAY_A );
// Return null if we found no results
if ( ! $results )
return;
// HTML for our select printing post titles as loop
$output = '<select name="project" id="project">';
foreach( $results as $index => $post ) {
$output .= '<option value="' . $post['ID'] . '">' . $post['post_title'] . '</option>';
}
$output .= '</select>'; // end of select element
// get the html
return $output;
}
// Then in your project just call the function
// Where you want the select form to appear
echo output_projects_list();
far better
mit der anderen Antwort? Dies ist technisch schneller, da Sie nur die Daten abrufen, die Sie von MySQL benötigen. Die andere Antwort (einfachere Antwort) erfasst alle Daten im Speicher und ändert sie anschließend in PHP. Das ist mehr Arbeit für PHP. Beide sind akzeptabel, aber jeder hat seine Stärken. Wenn Sie MySQL kennen, ist dies überhaupt nicht übermäßig komplex. Es ist ziemlich einfach.
Sie könnten - und sollten es meiner Meinung nach - API-Funktionen verwenden, um die Daten abzurufen.
// query for your post type
$post_type_query = new WP_Query(
array (
'post_type' => 'your-post-type',
'posts_per_page' => -1
)
);
// we need the array of posts
$posts_array = $post_type_query->posts;
// create a list with needed information
// the key equals the ID, the value is the post_title
$post_title_array = wp_list_pluck( $posts_array, 'post_title', 'ID' );
wp_list_pluck()
. Ich vergesse das immer ...
Für einen hierarchischen Beitragstyp haben wir Folgendes integriert:
wp_dropdown_pages(
[
'post_type' => 'page',
'echo' => 1,
'name' => 'wpse_titles',
'id' => 'wpse-titles'
]
);
Dadurch wird ein Auswahlelement mit Beitragstiteln und der Beitrags-ID als Optionswert generiert .
Beispiel:
<select name='wpse_titles' id='wpse-titles'>
<option class="level-0" value="1">AAA</option>
<option class="level-0" value="2">BBB</option>
<option class="level-1" value="3"> CCC</option>
</select>
Es ist nicht klar aus der Dokumentation für wp_dropdown_pages()
, aber es ist ein Wrapper für get_pages()
und unterstützt auch seine Eingabeargumente.
Die Art und Weise, wie ich solche Dinge immer gemacht habe, ist, etwas wie das Folgende zu verwenden get_posts
und zu foreach
mögen:
// Create our arguments for getting our post
$args = [
'post_type'=>'custom-slug'
];
// we get an array of posts objects
$posts = get_posts($args);
// start our string
$str = '<select>';
// then we create an option for each post
foreach($posts as $key=>$post){
$str .= '<option>'.$post->post_title.'</option>';
}
$str .= '</select>';
echo $str;