programing

태그가 필요한 항목에 대한 워드프레스 위젯 업데이트 인스턴스

cafebook 2023. 10. 15. 17:54
반응형

태그가 필요한 항목에 대한 워드프레스 위젯 업데이트 인스턴스

최근 저는 테마의 사이드바를 개발할 때 워드프레스의 위젯을 충분히 활용하지 못한다는 것을 깨달았고, 그래서 지난 며칠 동안 제대로 개발하는 방법을 연구했습니다.많은 튜토리얼을 검토한 결과 커스텀 빌드 위젯에 대한 많은 튜토리얼이 구식이라는 것을 알게 되었습니다.시공을 어디에 사용해야 하는지 확인했습니다.

function __construct() {
    parent::__construct(
    // Base ID of your widget
    'foobar_widget', 
    // Widget name will appear in UI
    __('Give them foo Widget', 'foobar_widget_domain'), 
    // Widget description
    array( 'description' => __( 'Development widget for testing', 'foobar_widget_domain' ), ) 
    );
}

커스터마이즈 위젯에 관한 코덱스는 매우 미미합니다.SO의 태그 단어를 검색한 후 을 눌러 텍스트 영역에 태그가 필요한 경우 위젯에 대한 업데이트를 호출할 때 해결책을 찾을 수 없었습니다.많은 사람들이 제목 인스턴스를 다음과 같이 호출합니다.

$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';

나의 기능으로form()복사된 구글 애드센스 광고처럼 사용자 입력 코드를 사용할 텍스트 영역이 필요합니다.다음이 효과가 있지만 양식의 입력을 수용하는 더 나은 방법이 있는지 확신할 수 없습니다.

// Updating widget replacing old instances with new
public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
    $instance['foo1'] = $new_instance['foo1'];
    return $instance;
    }
}

더 좋은 방법이 없을까요?$instancePHP를 사용하지 않고 태그가 필요할 때strip_tags()?

나는 HTML을 사용하는 사용자 지정 위젯을 등록하기 위해 다음과 같은 멋진 코드 조각을 사용합니다.

add_action('widgets_init', create_function('', 'register_widget("clean_markup_widget");'));
class Clean_Markup_Widget extends WP_Widget {
    function __construct() {
        parent::WP_Widget('clean_markup_widget', 'ASR Custom Text Widget', array('description'=>'Simple widget for well-formatted markup & text'));
    }
    function widget($args, $instance) {
        extract($args);
        $markup = $instance['markup'];
        //echo $before_widget;
        if ($markup) echo $markup;
        //echo $after_widget;
    }
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['markup'] = $new_instance['markup'];
        return $instance;
    }
    function form($instance) {
        if ($instance) $markup = esc_attr($instance['markup']);
        else $markup = __('<p>Clean, well-formatted markup.</p>', 'markup_widget'); ?>
        <p>
            <label for="<?php echo $this->get_field_id('markup'); ?>"><?php _e('Markup/text'); ?></label><br />
            <textarea class="widefat" id="<?php echo $this->get_field_id('markup'); ?>" name="<?php echo $this->get_field_name('markup'); ?>" type="text" rows="16" cols="20" value="<?php echo $markup; ?>"><?php echo $markup; ?></textarea>
        </p>
<?php }
}

더 좋은 방법이 없을까요?$instancePHP를 사용하지 않고 태그가 필요할 때strip_tags()?

예! WordPress는 사용자 데이터를 검증하고 검사하는 여러 가지 방법이 있습니다.

당신의 경우는 아주 잘 될 겁니다.

설명: 게시물 내용에 대해 허용된 HTML 태그에 대해 내용을 검사합니다.

에서 확인할 수 있는 기본 허용 태그 목록을 사용합니다.

특정 태그만 허용하고자 하는 경우 가장 안전한 방법은 다음을 사용하는 것입니다.wp_kses()대신에wp_kses_post().

다른 점은wp_kses()에 대한 두 번째 매개 변수가 필요합니다.$allowed_html사용하는 대신에$allowedposttags전역 변수

필터링 또는 재정의하는 방법이 있습니다.$allowedposttags글로벌 변수는 사용자의 위젯 이외에 게시 내용과 같은 다른 HTML에 영향을 미치기 때문에 이 경우에는 아마도 가장 좋은 아이디어는 아닐 것입니다.

사용자는 기능을 업데이트합니다.wp_kses_post()다음과 같습니다.

// Updating widget replacing old instances with new
public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
    $instance['foo1'] = wp_kses_post( $new_instance['foo1'] );
    return $instance;
}

언급URL : https://stackoverflow.com/questions/32620936/wordpress-widget-update-instances-for-items-that-need-tags

반응형