这行代码不正确
<?php if ( !function_exists(\'redmenu_widget\') || !dynamic_sidebar(\'redmenu_widget\') ) : ?>
更重要的是,负操作符(
!
) 这里是错的
这行代码简单地转换为
如果功能redmenu_widget
不存在或如果侧栏redmenu_widget
不存在,请执行某些操作
您只需放下操作员和!function_exists(\'redmenu_widget\')
部分您还应该检查侧栏是否处于活动状态。这部分代码应该如下所示
<aside id="widgets">
<?php if ( is_active_sidebar(\'redmenu_widget\') ) : ?>
<div id="primary" class="widget-area">
<ul class="xoxo">
<?php dynamic_sidebar(\'redmenu_widget\'); ?>
</ul>
</div><!-- #primary .widget-area -->
<?php endif; ?>
</aside>
此外,不幸的是,您的小部件是一团乱麻。有很多错误。您应该检查
Widget API 以及如何正确创建小部件。此外,在注册小部件时,您希望使用类名。
根据您的评论编辑,您需要一个自定义文本小部件。要实现这一点,只需复制默认文本小部件并根据需要进行自定义。这是默认的文本小部件,我已经重命名了它,所以你可以复制并粘贴到你的主题中
class Red_Menu_Widget extends WP_Widget {
public function __construct() {
$widget_ops = array( \'classname\' => \'redmenu_widget\', \'description\' => __(\'Rood menu rechts\', \'redmenu_widget\') );
$control_ops = array( \'width\' => 400, \'height\' => 350 );
parent::__construct( \'redmenu_widget\', __(\'Rood menu rechts\', \'redmenu_widget\'), $widget_ops, $control_ops );
}
public function widget( $args, $instance ) {
/** This filter is documented in wp-includes/default-widgets.php */
$title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? \'\' : $instance[\'title\'], $instance, $this->id_base );
/**
* Filter the content of the Text widget.
*
* @since 2.3.0
*
* @param string $widget_text The widget content.
* @param WP_Widget $instance WP_Widget instance.
*/
$text = apply_filters( \'widget_text\', empty( $instance[\'text\'] ) ? \'\' : $instance[\'text\'], $instance );
echo $args[\'before_widget\'];
if ( ! empty( $title ) ) {
echo $args[\'before_title\'] . $title . $args[\'after_title\'];
} ?>
<div class="textwidget"><?php echo !empty( $instance[\'filter\'] ) ? wpautop( $text ) : $text; ?></div>
<?php
echo $args[\'after_widget\'];
}
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[\'title\'] = strip_tags($new_instance[\'title\']);
if ( current_user_can(\'unfiltered_html\') )
$instance[\'text\'] = $new_instance[\'text\'];
else
$instance[\'text\'] = stripslashes( wp_filter_post_kses( addslashes($new_instance[\'text\']) ) ); // wp_filter_post_kses() expects slashed
$instance[\'filter\'] = isset($new_instance[\'filter\']);
return $instance;
public function form( $instance ) {
$instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'text\' => \'\' ) );
$title = strip_tags($instance[\'title\']);
$text = esc_textarea($instance[\'text\']);
?>
<p><label for="<?php echo $this->get_field_id(\'title\'); ?>"><?php _e(\'Title:\'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id(\'title\'); ?>" name="<?php echo $this->get_field_name(\'title\'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p>
<textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id(\'text\'); ?>" name="<?php echo $this->get_field_name(\'text\'); ?>"><?php echo $text; ?></textarea>
<p><input id="<?php echo $this->get_field_id(\'filter\'); ?>" name="<?php echo $this->get_field_name(\'filter\'); ?>" type="checkbox" <?php checked(isset($instance[\'filter\']) ? $instance[\'filter\'] : 0); ?> /> <label for="<?php echo $this->get_field_id(\'filter\'); ?>"><?php _e(\'Automatically add paragraphs\'); ?></label></p>
<?php
}
}
然后注册它
add_action( \'widgets_init\', \'prefix_register_widgets\' );
function prefix_register_widgets() {
register_widget( \'Red_Menu_Widget\' );
}
您可以根据问题中的示例注册侧栏(只需更改id,因为它可能会与您的小部件产生冲突,可以这样称呼它
redmenu-sidebar
) 然后在模板文件中调用侧栏,如下所示
<aside id="widgets">
<?php if ( is_active_sidebar( \'redmenu_sidebar\' ) ) : ?>
<div id="primary" class="widget-area">
<ul class="xoxo">
<?php dynamic_sidebar(\'redmenu_sidebar\'); ?>
</ul>
</div><!-- #primary .widget-area -->
<?php endif; ?>
</aside>
这应该能帮到你。修改代码和小部件以满足您的需要