답변:
특정 게시물 유형의 모든 게시물 제목 조회
// 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
다른 답변 은 무엇입니까 ? mysql에서 필요한 데이터 만 가져 오기 때문에 기술적으로 더 빠릅니다. 다른 답변 (쉬운 답변)은 모든 데이터를 메모리로 가져간 다음 나중에 PHP에서 수정합니다. PHP에서 더 많은 작업을 수행합니다. 둘 다 허용되지만 각각의 장점이 있습니다. mysql을 알고 있다면 이것은 지나치게 복잡하지 않습니다. 꽤 간단합니다.
내 생각에 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_list_pluck()
. 나는 항상 그 점을 잊어 버립니다 ...
를 들어 계층 포스트 유형, 우리는이 내장 :
wp_dropdown_pages(
[
'post_type' => 'page',
'echo' => 1,
'name' => 'wpse_titles',
'id' => 'wpse-titles'
]
);
게시물 제목 과 게시물 ID 를 옵션 값으로 사용하여 select 요소를 생성 합니다.
예:
<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>
에 대한 문서 는 명확하지 않지만 wp_dropdown_pages()
래퍼이며 get_pages()
입력 인수를 지원합니다.
내가 항상 이와 같은 일을하는 방식은 다음 get_posts
과 foreach
같은 것을 사용 하고 있습니다.
// 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;