kiểm tra xem thanh bên đã đăng ký có hoạt động không và có nội dung widget


6

Tôi muốn kiểm tra xem một thanh bên đã đăng ký có nội dung tiện ích không - nhưng dường như không thể tìm thấy chức năng WP cho việc này - is_active_widget kiểm tra xem nó có nội dung không, nhưng có tồn tại hay không.

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { // widget name passed ##

        // check if widget is active - return html & widget content if true ##
        if ( is_active_sidebar( $widget ) ) { 

        echo '
        <div class="'.$element.'">';

            dynamic_sidebar( $widget );

         echo '</div>';

        } else {

            // issue error if requested widget does not exist or is empty ##
            if ( ql_user_is_administator() ) { // user is admin ##

                if ( dynamic_sidebar( $widget ) ) { // empty ##

                    $message = 'empty';

                } else { // widget ID or name wrong ##

                    $message = 'error';

                }

?>
                <div class="error"><strong>Widget <?php echo $message; ?>:</strong> 
                <?php echo $widget_name ? $widget_name : $widget ; ?></div>
<?php 


            }
        }
    }
}

Tôi gọi nó trên trang bằng cách sử dụng:

// load widget ##
// widget_id, widget name, class of containing element ##
ql_widget( 'sidebar-general', 'Standard Sidebar', 'sider' );

Các thanh bên được đăng ký chính xác với register_sidebar () và có một ID duy nhất được gán cho mỗi.

Hiện tại chức năng này trả về lỗi cho quản trị viên nếu tiện ích bị thiếu hoặc trống - Tôi muốn có thể điều chỉnh lỗi để cho biết nếu nó thiếu hoặc trống

Cảm ơn!

CẬP NHẬT đây là chức năng làm việc: liên kết đến pastebin

Câu trả lời:


7

wp_get_sidebars_widgets();sẽ trả về một danh sách tất cả các thanh bên & các vật dụng trong mỗi chúng. Điều này có thể cho phép bạn kiểm tra sidebars không có widget


chơi lô tô! - Tôi sẽ cập nhật câu trả lời để hiển thị giải pháp tôi đã sử dụng - cảm ơn
Q Studio

3
Đó không phải là những gì is_dynamic_sidebarcho?
Adam

điều này cho phép tôi kiểm tra cả 3 trạng thái - tên sai, trống, hiển thị nếu tất cả đều tốt ...
Q Studio

9

Bạn có thể kiểm tra xem một thanh bên đang hoạt động và đang sử dụng (có chứa các vật dụng có nội dung) thông qua việc sử dụng is_active_sidebar, đây là một ví dụ ...

if ( is_active_sidebar( $sidebar ) ) {
    // Display some text
} else {
    // Display none
};

Trong trường hợp $sidebarcó thể là từ tên, ID hoặc số thanh bên bạn muốn kiểm tra.

Cập nhật:

Đây là một gợi ý để cải thiện tính dễ đọc của chức năng của bạn,

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { 

        $message = (ql_user_is_administator() ? 'empty' : 'error');
        $widget_name = ($widget_name ? $widget_name : $widget);

        if ( is_active_sidebar( $widget ) ) { 

            $html  = '<div class="'.$element.'">';
            $html .= dynamic_sidebar( $widget );
            $html .= '</div>';
            echo $html;

        } else {

            $html  = '<div class="error"><strong>Widget ';
            $html .= $message;
            $html .= '</strong> ';
            $html .= $widget_name;
            $html .= '</div>';
            echo $html;

        }
    }
} // This is the end of the function

Và nếu bạn chỉ muốn được thông báo lỗi xuất hiện nếu admin, sau đó quấn các nội dung bên trong của elsetuyên bố với điều kiện khác hoặc thay đổi elseđể elseifvà chạy kiểm tra cho một quản trị viên, và tùy chọn kết liễu với một elseđiều kiện để đáp ứng tất cả các kết quả khác, chẳng hạn như cho người dùng thường xuyên. Tham chiếu Codex: http://codex.wordpress.org/Function_Reference/is_active_sidebar


cảm ơn - Tôi đã sử dụng chức năng đó - Tôi muốn hiển thị thanh bên nếu nó có widget, trả về lỗi nếu thanh bên bị sai tên và không làm gì nếu nó được đặt tên chính xác nhưng trống rỗng.
Q Studio
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.