Liệt kê tất cả các tên bên?


14

Tôi đang liệt kê tất cả các sidebars như thế:

global $wp_registered_sidebars;

echo '<pre>';
print_r($wp_registered_sidebars); 
echo '</pre>'

Vì vậy, tôi nhận được một cái gì đó như:

Array
(
    [sidebar-1] => Array
        (
            [name] => Sidebar #1
            [id] => sidebar-1
            [description] => Sidebar number 1
            [before_widget] => 
            [after_widget] => 
            [before_title] => 
            [after_title] =>
        )

 (...)

)

Nhưng tôi muốn hiển thị chúng dưới dạng một danh sách chọn lọc, như:

<select>
  <option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
  <option value ="SIDEBAR-ID">SIDEBAR-NAME/option>
(...)
</select>

Wordpress Codex hoàn toàn không hữu ích.

Cảm ơn bạn!


Chính xác thì bạn đang liệt kê các thanh bên và mục đích này phục vụ cho mục đích gì?
kaiser

Câu trả lời:


23

Vòng qua toàn cầu:

<select>
<?php foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) { ?>
     <option value="<?php echo ucwords( $sidebar['id'] ); ?>">
              <?php echo ucwords( $sidebar['name'] ); ?>
     </option>
<?php } ?>
</select>

Lưu ý:
Các ucwords()chức năng chỉ có để hiển thị nó chính xác như bạn hỏi. Không chắc chắn nếu bạn thực sự muốn điều đó.


Làm thế nào để truy cập các mảng và đối tượng toàn cầu:

Dù sao: Q của bạn chủ yếu là về cách truy cập mảng. Tôi đã viết một Q về điều đó (để giải thích thêm). Xin hãy xem ở đây.


6

Viết một hàm để tạo danh sách cho bạn?

function sidebar_selectbox( $name = '', $current_value = false ) {
    global $wp_registered_sidebars;

    if ( empty( $wp_registered_sidebars ) )
        return;

    $name = empty( $name ) ? false : ' name="' . esc_attr( $name ) . '"';
    $current = $current_value ? esc_attr( $current_value ) : false;     
    $selected = '';
    ?>
    <select<?php echo $name; ?>>
    <?php foreach ( $wp_registered_sidebars as $sidebar ) : ?>
        <?php 
        if ( $current ) 
            $selected = selected( $current === $sidebar['id'], true, false ); ?>    
        <option value="<?php echo $sidebar['id']; ?>"<?php echo $selected; ?>><?php echo $sidebar['name']; ?></option>
    <?php endforeach; ?>
    </select>
    <?php
}

Sau đó, chỉ cần gọi nó bất cứ nơi nào bạn cần để tạo một danh sách chọn với các thanh bên, tùy ý chuyển vào một tên, ví dụ.

sidebar_selectbox();

hoặc là

sidebar_selectbox( 'theme_sidebars' );

Ngoài ra và tùy chọn, chuyển vào một giá trị hiện được chọn ...

sidebar_selectbox( 'theme_sidebars', $var_holding_current );

Mong rằng sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.