Lista wyboru (select) wpisów własnego typu (custom post type)

WordPress daje bardzo fajne narzędzie pozwalające na szybkie i sprawne tworzenie panelu zarządzania szablonem po stronie admina z możliwością wyboru istniejących stron w formularzach.

Jeżeli potrzebna jest możliwość wyboru istniejącej strony w formularzu, możemy skorzystać z funkcji wp_dropdown_page(). Aby wyświetlić taką listę w formularz wystarczy następująca forma:

<?php 
$args = array(     
    'depth'                 => 0,
    'child_of'              => 0,
    'selected'              => 0,
    'echo'                  => 1,
    'name'                  => 'page_id',
    'id'                    => null, // string
    'show_option_none'      => null, // string
    'show_option_no_change' => null, // string
    'option_none_value'     => null, // string
);

wp_dropdown_pages( $args );
?>

Najważniejsze argumenty funkcji mają następujące znaczenie:

child_of – określa rodzica dla listowanych stron,

selected – wybrana opcja dla rozwijanej listy,

echo – wyświetlanie lista (w przeciwnym razie można ją zapisać do zmiennej),

name – nazwa zmiennej / pola formularza.

Dla standardowych stron utworzonych na WordPressie jest to doskonałe rozwiązanie. Problem pojawia się jednak wówczas, gdy chcemy wyświetlić listę wyboru wpisów własnego typu, czyli custom_post_type.

Aby stworzyć sobie wygodne rozwiązanie tego problemu, można skorzystać z poniższej funkcji:

<?php
function custom_post_select($select_id, $post_type, $selected = 0) {
    $post_type_object = get_post_type_object($post_type);
    $label = $post_type_object->label;
    $posts = get_posts(array('post_type'=> $post_type, 'post_status'=> 'publish', 'suppress_filters' => false, 'posts_per_page'=>-1));
    echo '<select name="'. $select_id .'" id="'.$select_id.'">';
    echo '<option value = "" >'.$label.' </option>';
    foreach ($posts as $post) {
        echo '<option value="', $post->ID, '"', $selected == $post->ID ? ' selected="selected"' : '', '>', $post->post_title, '</option>';
    }
    echo '</select>';
}
?>

Dzięki temu, jeżeli tylko chcemy umieścić w formularzu rozwijaną listę wyboru własnego typu wpisów (custom post type), wystarczy wywołać funkcję na przykład:

<?php
custom_post_select('product_id','product');
?>

Submit a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *