2012-11-15 2 views
0

위젯이 이 현재 프런트 엔드에으로 표시되는지 확인하는 기능이 있습니까?
일부 스타일이나 스크립트를 가져 오거나 위젯에 다른 작업을 수행 할 때 필요합니다.현재 프런트 엔드에 WordPress 위젯이 표시되어 있는지 확인

+0

wordpress.SE 예를 들어이 주제에 대한 몇 가지 게시물이 있습니다 : http://wordpress.stackexchange.com/questions/2302/loading-scripts-only-if-a-particular-shortcode-or-widget -is-present/2304 # 2304 –

+0

'is_active_widget()'은 전역 $ wp_registered_widgets에서 'xyz'위젯이 활성화되어 있는지 확인합니다. 따라서 'xyz'위젯이 다른 사이드 바에서 활성화되어있는 경우 현재 페이지에 'xyz'위젯이 없어도 현재 페이지에 대해 항상 활성으로 돌아갑니다. – zourbuth

+0

예 ...하지만 true면 사이드 바 ID를 반환합니다. 따라서 현재 프론트 엔드에 어떤 사이드 바가 있는지 알고 있으면 문제가 해결됩니다. 따라서 문제는 다른 질문 (http://stackoverflow.com/questions/13404283/get-wordpress-sidebars-fom-the-current-front-end/13407134#comment18323631_13407134)을 고려하여 서클에서 실행됩니다. (나는이 권리가 있다고 생각하지만 위젯의 여러 인스턴스가 활성화되어 있다면 어떤 사이드 바 ID가 반환 될지 확신하지 못합니다.) –

답변

0

예를 들어 print_r을 사용하여 $ GLOBALS [ 'displayed_sidebars'] 및 $ GLOBALS [ 'displayed_widgets'] 내용을 반향하여 작동하는지 확인하십시오.

포함 할 모든 사이드 바에 대해 dynamic_sidebar를 실행 한 후에 테스트해야합니다.

add_filter('dynamic_sidebar_params', function($params) { 
    global $displayed_sidebars, $displayed_widgets; 
    if(!in_array($params[0]['id'], $displayed_sidebars)) 
     $displayed_sidebars[] = $params[0]['id']; 

    if(!in_array($params['widget_name'], $displayed_widgets)) 
     $displayed_widgets = $params['widget_name']; 

    return $params; 
}); 
관련 문제