특정 게시물 유형의 모든 게시물 제목을 검색하는 방법은 무엇입니까?


9

클라이언트 측에 에코되는 양식으로 select 요소 내에서 제목을 사용하고 싶습니다. 가장 좋은 방법은 무엇입니까?


그 질문은 명확하지 않습니다. 특정 게시물 유형의 모든 게시물에 대한 모든 게시물 제목을 반환하려고합니까? 맞습니까?
Ahmed Fouad

죄송합니다! 그렇습니다. 맞춤형 게시물 유형을 만들고이 유형의 게시물을 몇 개 만들었으며 사용자가 기부 할 제목 (프로젝트를 나타냅니다) 중 하나를 선택할 수있는 select 요소가있는 양식을 에코하고 싶습니다.
피터 터너

답변:


11

특정 게시물 유형의 모든 게시물 제목 조회

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

3
이것은 WordPress가 WP_Query 클래스에서 제공하는 API를 사용하여 쉽게 수행 할 수있는 매우 복잡한 기능입니다. @ialocin이 제공하는 답변이 훨씬 좋습니다. 이를 위해 $ wpdb가 필요하지 않습니다.
누군가가

예, 의견의 요점은 무엇입니까? :)
Ahmed Fouad

1
@Brian far better다른 답변 은 무엇입니까 ? mysql에서 필요한 데이터 만 가져 오기 때문에 기술적으로 더 빠릅니다. 다른 답변 (쉬운 답변)은 모든 데이터를 메모리로 가져간 다음 나중에 PHP에서 수정합니다. PHP에서 더 많은 작업을 수행합니다. 둘 다 허용되지만 각각의 장점이 있습니다. mysql을 알고 있다면 이것은 지나치게 복잡하지 않습니다. 꽤 간단합니다.
JoeMoe1984

@ JoeMoe1984에 동의합니다.이 기능은 다른 답변만큼 간단하지는 않지만 메모리 측면에서 훨씬 효율적입니다. SQL은 귀중한 정보를 줄이거 나 추출하기에 FAR 더 나은 곳입니다 (wp_list_pluck (...)). 예, 약간 더 복잡하지만 시스템은 그 점에 대해 감사합니다.
mawalker

13

내 생각에 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' );

2
일에 대한 wp_list_pluck(). 나는 항상 그 점을 잊어 버립니다 ...
FaCE

나를 뽑아 줘서 +1! 내가 어떻게 이것을 전에 보지 않았습니까?
Chizzle

5

를 들어 계층 포스트 유형, 우리는이 내장 :

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

에 대한 문서 는 명확하지 않지만 wp_dropdown_pages()래퍼이며 get_pages()입력 인수를 지원합니다.


0

내가 항상 이와 같은 일을하는 방식은 다음 get_postsforeach같은 것을 사용 하고 있습니다.

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

잘 작동하고 있습니다. 감사합니다. 현재 저장된 옵션에 'selected'를 추가하려고합니다. 코드의 많은 다른 비트를 시도하고 마침내이 옵션을 업데이트 할 수는 있지만 'selected'가 추가되지 않습니다. 올바른 것으로. 내가 잘못하고있는 것에 대한 조언이 있습니까? `$ str. = '<옵션'. ($ post == $ value2? 'selected = selected': ''). '>'. . $ 포스트> POST_TITLE '</ 옵션>'; '제안에 대한 많은 감사 PS 미안 내가 제대로 코드를 추가 할 수하지 않는 것, 시도 역 따옴표
Jo_pinkish
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.