我正在尝试创建一些自定义小部件。
我创建了一个,只需要一个不同的标题字段。但是,当我尝试创建一个允许我拥有多个字段的小部件时,我现在陷入困境。我需要以下小部件字段:
我希望窗体小部件表单允许用户使用文本更新上面的字段。然后我想输出他们在我的侧边栏小部件中写的文字。
我有以下代码,用于我之前制作的小部件(除了标题之外没有其他字段)
class registercv_widget extends WP_Widget {
function __construct() {
parent::__construct(
'registercv_widget',
__('Register CV Widget', 'registercv_widget_domain'),
array( 'description' => __( 'Provides a "Register CV" button which launches a pop-up', 'registercv_widget_domain' ), )
);
}
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] );
echo $args['before_widget'];
echo '<div class="widget-wrapper">';
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];
// This is where you run the code and display the output
echo __( '<div class="register-button"><span><div class="button white">Send your CV</div></span></div>', 'registercv_widget_domain' );
echo '</div>';
echo $args['after_widget'];
}
// Widget Backend
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'Register as a candidate', 'registercv_widget_domain' );
}
// Widget admin form
?>
<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>
<?php
}
// 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'] ) : '';
return $instance;
}
}
function registercv_load_widget() {
register_widget( 'registercv_widget' );
}
add_action( 'widgets_init', 'registercv_load_widget' );
这样可行,但如何为此添加额外字段?
我尝试复制$title
的所有实例并再次使用$text_one
进行复制,但我不明白该字段的注册方式。有人可以帮忙吗?
答案 0 :(得分:1)
找到了解决方案。
我从上面的代码开始,并且能够创建多个字段:
echo $args['before_widget'];
echo '<div class="widget-wrapper">';
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];
if ( ! empty( $text_two ) )
echo '<p>' . $text_two . '</p>';
if ( ! empty( $link_text ) )
echo '<p><a href="/employers/executives">' . $link_text . '</a><i class="fa fa-play"></i></p>';
echo '</div>';
echo $args['after_widget'];
上面的示例使用$text_two
和$link_text
变量,可以通过小部件屏幕使用以下内容设置:
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'Executive Search', 'executive_widget_domain' );
}
if ( isset( $instance[ 'text_two' ] ) ) {
$text_two = $instance[ 'text_two' ];
}
else {
$text_two = __( 'Systematic searching to map the right talent for Director level roles using the best possible sector intelligence.', 'executive_widget_domain' );
}
if ( isset( $instance[ 'link_text' ] ) ) {
$link_text = $instance[ 'link_text' ];
}
else {
$link_text = __( 'Visit Executive Search', 'executive_widget_domain' );
}
// Widget admin form
?>
<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 ); ?>" />
<br /><br />
<label for="<?php echo $this->get_field_id( 'text_two' ); ?>"><?php _e( 'Main text:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'text_two' ); ?>" name="<?php echo $this->get_field_name( 'text_two' ); ?>" type="text" value="<?php echo esc_attr( $text_two ); ?>" />
<br /><br />
<label for="<?php echo $this->get_field_id( 'link_text' ); ?>"><?php _e( 'Link text' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'link_text' ); ?>" name="<?php echo $this->get_field_name( 'link_text' ); ?>" type="text" value="<?php echo esc_attr( $link_text ); ?>" />
</p>
<?php
}
将上述代码放在functions.php
中会为您提供一个名为Executive Search. It has three fields:
title ,
text_two (a simple text string) and
链接文字`的小部件。这些是用户可以添加的三个字段。