我非常喜欢使用大量插件和主题的wordpress,我只是学习如何编写我自己的自定义小部件。
当我将它包含在我的主题功能中时,我的小部件工作正常。它在后端显示,也在前端显示,就像另一个小部件一样。
我遇到的唯一问题是,当我添加/创建另一个小部件时,小部件(所有小部件)开始行动起来很糟糕。
当我将小部件添加到小部件区域时,它会显示选项(表单),但随后选项突然消失。
当我尝试刷新管理区域上的页面(widget.php)时,该小部件上的选项显示正常,我可以修改该小部件上的值并像普通小部件一样保存它。
< / LI>此行为会影响我的管理区域中的其他功能,例如添加图片缩略图很奇怪(我可以添加缩略图,但图片不会显示在编辑页面的缩略图部分。
还有其他功能,例如当我点击保存时添加新帖子显示在空白页面上时,添加类别,页面,菜单或任何说新增内容的条件也相同。即使在保存我的主题选项时,它也会在我点击保存后将其指向空白页。
这是小部件代码。
<?php
class chalax_try_widget extends WP_Widget {
/**
* Register widget with WordPress.
*/
function __construct() {
parent::__construct(
'chalax_try_widget', // Base ID
__('Chalax try List', 'text_domain'), // Name
array( 'description' => __( 'Widget untuk menampilkan daftar artikel/berita tertentu', 'text_domain' ), ) // Args
);
}
/**
* 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 ) {
echo $args['before_widget'];
echo $args['before_title'].$instance['title1'].$args['after_title'];
echo "string";
echo $args['after_widget'];
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form( $instance ) {
if (isset($instance['title1'])) {
# code...
$title1=$instance['title1'];
}else{
$title1="jajal";
}
?>
<input id="<?php echo $this->get_field_id( 'title1' ); ?>" name="<?php echo $this->get_field_name( 'title1' ); ?>" value="<?php echo $title1 ;?>">
<?php
}
/**
* 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 = array();
$instance['title1'] = ( ! empty( $new_instance['title1'] ) ) ? strip_tags( $new_instance['title1'] ) : '';
return $instance;
}
} // class Foo_Widget
?>
小部件正常工作, 但是当我尝试添加另一个客户端小部件时,请这样说..
<?php
class chalax_try_widget extends WP_Widget {
/**
* Register widget with WordPress.
*/
function __construct() {
parent::__construct(
'chalax_try_widget', // Base ID
__('Chalax try List', 'text_domain'), // Name
array( 'description' => __( 'Widget untuk menampilkan daftar artikel/berita tertentu', 'text_domain' ), ) // Args
);
}
/**
* 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 ) {
echo $args['before_widget'];
echo $args['before_title'].$instance['title1'].$args['after_title'];
echo "string";
echo $args['after_widget'];
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form( $instance ) {
if (isset($instance['title1'])) {
# code...
$title1=$instance['title1'];
}else{
$title1="jajal";
}
?>
<input id="<?php echo $this->get_field_id( 'title1' ); ?>" name="<?php echo $this->get_field_name( 'title1' ); ?>" value="<?php echo $title1 ;?>">
<?php
}
/**
* 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 = array();
$instance['title1'] = ( ! empty( $new_instance['title1'] ) ) ? strip_tags( $new_instance['title1'] ) : '';
return $instance;
}
} // class Foo_Widget
?>
然后问题出现了..
我按照教程甚至从codex复制这些函数..
答案 0 :(得分:0)
如果你这样做,你应该得到一个PHP错误。基本上你要声明一个具有相同名称的类两次(与声明一个函数两次相同的效果)只需重命名第二个类。
此外,您缺少注册窗口小部件的代码,我认为它随着某些内容的变化而存在。如果没有,请将其添加到代码中。