2015-09-17 24 views
6

Geçtiğimiz günlerde, temaların içinde sidebar oluştururken yeterince WordPress aracı kullanmıyorum. Bu yüzden son birkaç gündür bunları düzgün bir şekilde nasıl geliştireceklerini araştırdım. Bir çok öğreticiyi inceledikten sonra, güncel olmayan bir şekilde özel bina widget'larında birkaç tane bulduk. o özel widget'lar geldiğindeWordPress eklentisi Etiketler için ihtiyaç duyulan öğeler için güncelleme örnekleri

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'),) 
    ); 
} 

codex çok azdır: Ben yapısı kullanmalıdır nerede gördün. SO's etiketlerine göz attıktan sonra ve Bir textarea'nın etiketlere ihtiyacı varsa, widget için bir güncelleme çağırırken bir çözüm görmedim. Ben Kopyalanan Google Adsense reklam gibi, kullanıcı giriş kodunu alacak bir textarea gerek ediyorum benim fonksiyonu form() yılında

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

: İnsanların çok sayıda başlık örneğini çağırarak gösterirler. Aşağıdaki işler ancak formdan girişi almanın daha iyi bir yaklaşım olup olmadığını emin değilim:

// 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; 
    } 
} 

PHP en strip_tags() kullanmadan etiketleri gerektiğinde $instance dönmek için daha iyi bir yolu var mı?

cevap

0

Ben PHP en strip_tags() kullanmadan etiketleri gerektiğinde $instance dönmek için daha iyi bir yolu var mı herhangi bir 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 } 
} 
0

alır özel bir widget kayıt müthiş kod parçacığını aşağıdaki kullanabilir miyim?

Evet! WordPress'in kullanıcı verilerini doğrulamak ve sterilize etmenin birçok yolu vardır.

Sizin durumunuz için wp_kses_post() çok iyi çalışmalıdır.

Açıklama: İçeriği içerik için izin verilen HTML etiketleri için içerikte sakla.

wp-includes/kses.php'da bulabileceğiniz varsayılan izin verilen etiketler listesini kullanır.

Yalnızca belirli etiketlere izin vermek istiyorsanız, bunu yapmanın en güvenli yolu, wp_kses_post() yerine wp_kses() kullanarakdır.

wp_kses() arasındaki fark, $allowedposttags genel değişkeni yerine $allowed_html için ikinci bir parametre gerektirir.

$allowedposttags genel değişkenini filtrelemenin veya geçersiz kılmanın yolları vardır, ancak bu durumda, widget'ınıza ek olarak posta içeriği gibi diğer HTML'yi de etkileyeceğinden, muhtemelen bu durumda en iyi fikir değildir.

wp_kses_post() ile

Sen güncelleme fonksiyonu şu şekilde görünecektir :

// 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; 
}