我正在为广告商的show name创建一个WordPress小部件。
当我尝试激活插件时,出现了一个错误
The plugin generated 3 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.
我做了以下事情:
1-删除PHP打开或关闭标记前后的空白
2-将编码更改为UTF8-BOM
<?php
class adsMain extends WP_Widget {
public function __construct() {
parent::__construct(
\'adsMain\',
__( \'تبلیغات\', \'text\' ),
array(
\'classname\' => \'adsMain\',
\'description\' => __( \'برای ایجاد تبلیغات جدید این کادر را به مکان دلخواه خود بکشید.\', \'text\' )
)
);
}
/**
* Front-end display of widget.
*
* @see WP_Widget::widget()
*
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget( $args, $instance ) {
extract( $args );
$advertiser = apply_filters( \'widget_title\', $instance[\'advertiser\'] );
echo $advertiser;
}
/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
*
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
*
* @return array Updated safe values to be saved.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[\'advertiser\'] = strip_tags( $new_instance[\'advertiser\'] );
return $instance;
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form( $instance ) {
$advertiser = ( isset($instance[\'advertiser\']) ? esc_attr ( $instance[\'advertiser\'] ) : \'\' );
?>
<p>
<label for="<?php echo $this->get_field_id(\'advertiser\'); ?>"><?php _e(\'نام شخص / شرکت تبلیغ دهنده:\'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id(\'advertiser\'); ?>" name="<?php echo $this->get_field_name(\'advertiser\'); ?>" type="text" value="<?php echo $advertiser; ?>" />
</p>
<?php
}
}
/* Register uploader */
add_action (\'admin_enqueue_scripts\', function () {
wp_register_script(\'adsMain-script\' , plugins_url( \'/js/adsMain-script.js\', __FILE__ ), array( \'jquery\' ), \'20160904\', true );
wp_enqueue_script(\'adsMain-script\');
wp_enqueue_media();
});
/* Register the widget */
add_action(\'widgets_init\', function() {
register_widget( \'adsMain\' );
});
?>
最合适的回答,由SO网友:Johansson 整理而成
什么是BOM?
UTF-8byte order mark 或者只是UTF-8 BOM
是帮助读者理解当前文档编码的一系列字节。
这3个字节是:
EF BB高炉
或者简单地使用Unicode字符:U+FEFF
在编码为BOM的插件文件中,调用模板时将输出这些字节,从而导致标头中的早期输出,从而触发常见错误:
插件在激活期间生成了X个字符的意外输出。
这也可能发生在主题的文件上。因为不建议对UTF-8文件使用BOMUnicode Standards, 您可以将模板另存为UTF-8 without BOM.
您还将注意到,在BOM下编码的每个UTF-8文件至少有3个字节的大小,即使它是空的。