問題描述

我想使用我在回應客户端的形式的 select 元素中的標題。這樣做最好的方法是什麼?

最佳解決思路

查詢特定帖子類型的所有帖子標題

// 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();

次佳解決思路

你可以 – 在我看來,應該 – 使用 API​​函數來獲取數據。

// 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_dropdown_pages(
    [
        'post_type' => 'page',
        'echo'      => 1,
        'name'      => 'wpse_titles',
        'id'        => 'wpse-titles'
    ]
);

這將生成具有帖子標題的選擇元素,並將帖子 ID 作為選項值。

例:

<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">&nbsp;&nbsp;&nbsp;CCC</option>
</select>

wp_dropdown_pages()documentation 尚不清楚,但它是 get_pages()的封裝,也支持其輸入參數。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。