2012-09-10 4 views
7

Wordpress에서 저의 목표는 사이드 바에 넣은 모든 위젯에 맞춤 클래스를 제공하는 것입니다. 각 위젯의 위젯 설정에이 클래스를 추가하고 싶습니다. 또한 제 3 자 위젯.Wordpress : 모든 위젯 설정에 설정 옵션 추가

클래스 이름이 이미 register_sidebar 기능 (% 2 $ S)에 전달되기 때문에 내가 클래스 이름을 변경하는 생각을했다 :

<?php 
register_sidebar(array('before_widget' => '<aside id="%1$s" class="widget %2$s blue">')); 
?> 

는 당연히 내가 WP 코어 코드 또는 제 3 자를 변경하지 마십시오 플러그인. 즉, 위젯 구성 프로세스에 연결할 플러그인을 작성해야합니다.

나는 이미 'in_widget_form'행동으로 접선에 의해, 모든 위젯의 형태를 수정할 수 있다는 발견 :

<?php 
add_action('in_widget_form', 'teaserWidgetAddToForm'); 

function teaserWidgetAddToForm($widget_instance) { 
    ?> 
    <label for="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>">Custom classname(s):</label> 
    <input type="text" id="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>" name="<?php echo $widget_instance->get_field_name('teaser-classname'); ?>"> 
    <?php 
} 
?> 

이 데이터는 위젯 슈퍼 클래스로 저장해야합니다,하지만 당신은이 데이터를 검색 어떻게 (위젯 설정을 열면 이전에 입력 한 내용이 나중에 표시됩니다.)

그리고이 저장된 데이터는 위젯 인스턴스에 저장해야합니다. 나는 같은 것을 사용하여 같아요 그래서 기본적으로

<?php 
$wp_registered_widgets[<widget_id>]['callback'][0]['widget_options']['classname'] = <chosen_class>; 
?> 

을 나는이 개 질문이 :

  • 내가 만약 그렇다면, 어떻게이 문제 (개별 위젯 스타일)
  • 를 해결하기 위해 적절한 방법을 사용하고 있는가 Wordpress 나 타사 플러그인 소스 코드를 수정하지 않고도 위젯 인스턴스를 수정하여 추가 설정을 저장하고 검색 할 수 있습니까? 기본적으로

답변

8
  1. 각 위젯 인스턴스를 스타일을 사용할 수있는 고유 한 ID가 있습니다.

  2. in_widget_form 작업에 추가 된 입력란의 데이터를 저장하려면 widget_update_callback 필터가 있어야합니다.

    function my_widget_update_callback($instance, $new_instance) { 
        $instance['my_classnames'] = $new_instance['my_classnames']; 
        return $instance; 
    } 
    

    저장된 값을 양식에 표시하려면 먼저 인스턴스 설정을 검색해야합니다.

    function my_in_widget_form($instance) { 
        $settings = $instance->get_settings(); 
        … 
    

    는 마지막으로, 사용자 정의 클래스를 추가하는 가장 간단한 방법은 위젯이 표시되기 전에 실행 widget_display_callback 필터에 생각합니다. 이 필터에서 인스턴스 만 반환 할 수 있기 때문에 직접 위젯을 표시해야하며 인스턴스는 위젯 CSS 클래스를 제어하지 않습니다.

    function my_widget_display_callback($instance, $widget, $args) { 
        if (!isset($instance['my_classnames'])) { 
         return $instance; 
        } 
    
        $widget_classname = $widget->widget_options['classname']; 
        $my_classnames = $instance['my_classnames']; 
    
        $args['before_widget'] = str_replace($widget_classname, "{$widget_classname} {$my_classnames}", $args['before_widget']); 
    
        $widget->widget($args, $instance); 
    
        return false; 
    } 
    

위젯에 관련된 가능한 후크에 대한 추가 정보를 원하시면이 문서를 참조하십시오 : http://shibashake.com/wordpress-theme/wordpress-widget-system

+0

브릴리언트! 그동안 새로운 설정을 저장할 수 있었고 "widget_display_callback"훅을 사용했다. 그러나 false를 반환하고 $ widget-> widget()을 호출 할 수 있다는 것을 인식하지 못했습니다. 감사합니다. – publicJorn