J'essaie de créer des widgets personnalisés.
J'en ai créé un qui ne nécessitait qu'un autre champ de titre. Cependant, je suis maintenant bloqué lorsque je tente de créer un widget qui me permet d’avoir plusieurs champs. J'ai besoin des champs suivants pour le widget:
Je veux que le formulaire de widget permette à l'utilisateur de mettre à jour les champs ci-dessus avec du texte. Je veux ensuite sortir le texte qu'ils ont écrit dans mon widget barre latérale.
J'ai le code suivant qui est pour le widget précédent que j'ai créé (sans champs supplémentaires à part le titre)
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' );
Cela fonctionne bien mais comment puis-je ajouter des champs supplémentaires à cela?
J'ai tenté de copier toutes les instances de $title
et de les refaire mais avec $text_one
mais je ne comprends pas comment ce champ est enregistré. Quelqu'un peut aider?
Je suppose que vous voulez ajouter plus de champs personnalisés dans le formulaire d’arrière-plan du widget. Pour cela, il vous suffit de créer un nouveau champ dans la fonction form( $instance );
.
Donc, le code ressemblera à
// Widget Backend
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'Register as a candidate', 'registercv_widget_domain' );
}
if ( isset( $instance[ 'name' ] ) ) {
$name = $instance[ 'name' ];
}
else {
$name = __( 'Enter your name', '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>
<p>
<label for="<?php echo $this->get_field_id( 'name' ); ?>"><?php _e( 'Name:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'name' ); ?>" name="<?php echo $this->get_field_name( 'name' ); ?>" type="text" value="<?php echo esc_attr( $name ); ?>" />
</p>
<?php
}
Le code ci-dessus va créer un nouveau champ dans le formulaire. Ensuite, nous devrons sauvegarder/mettre à jour la valeur de ce nouveau champ dans la base de données, suivez le code ci-dessous:
// 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['name'] = ( ! empty( $new_instance['name'] ) ) ? strip_tags( $new_instance['name'] ) : '';
return $instance;
}