J'ai le code suivant pour afficher les widgets dans le personnaliseur.
function arphabet_widgets_init() {
register_sidebar( array(
'name' => 'Social Media button',
'id' => 'smb',
) );
register_sidebar( array(
'name' => 'Link button',
'id' => 'lb',
) );
class My_Widget extends WP_Widget {
public function __construct() {
$widget_ops = array(
'classname' => 'my_widget',
'description' => 'Adds a new Social Media button',
);
parent::__construct( 'my_widget', 'Social Media button', $widget_ops );
}
public function widget( $args, $instance ) {
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
if ( ! empty( $instance['url'] ) ) {
echo $args['url_title'] . apply_filters( 'widget_url', $instance['url'] ) . $args['after_url'];
}
if ( ! empty( $instance['icon'] ) ) {
echo $args['icon_title'] . apply_filters( 'widget_icon', $instance['icon'] ) . $args['after_icon'];
}
echo $args['after_widget'];
}
public function form( $instance ) {
$title = ! empty( $instance['title'] ) ? $instance['title'] : __( 'New title', 'text_domain' );
$url = ! empty( $instance['url'] ) ? $instance['url'] : __( 'http://', 'text_domain' );
$icon = ! empty( $instance['icon'] ) ? $instance['icon'] : __( 'globe', 'text_domain' );
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( esc_attr( 'Title: (for search engines)' ) ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'url' ) ); ?>"><?php _e( esc_attr( 'URL:' ) ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'url' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'url' ) ); ?>" type="text" value="<?php echo esc_attr( $url ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'icon' ) ); ?>"><?php _e( esc_attr( 'Icon:' ) ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'icon' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'icon' ) ); ?>" type="text" value="<?php echo esc_attr( $icon ); ?>">
</p>
<?php
}
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
$instance['url'] = ( ! empty( $new_instance['url'] ) ) ? strip_tags( $new_instance['url'] ) : '';
$instance['icon'] = ( ! empty( $new_instance['icon'] ) ) ? strip_tags( $new_instance['icon'] ) : '';
return $instance;
}
}
dynamic_sidebar( 'smb' );
dynamic_sidebar( 'lb' );
register_widget( 'My_Widget' );
}
add_action( 'widgets_init', 'arphabet_widgets_init' );
Cela fonctionne, mais je ne sais pas comment les afficher. C'est ce que j'ai essayé:
<?php if ( is_active_sidebar( 'smb' ) ) { ?>
<h1><?php dynamic_sidebar( 'smb' ); ?></h1>
<?php } ?>
mais cela sort le widget entier. Je souhaite sortir un champ spécifique, tel que le titre ou l'URL.
Je veux qu'il soit sorti comme ça:
<li><a href="[URL]" class="fa fa-[ICON]">[TITLE]</a></li>
Regardez ceci, cela peut vous guider dans la direction dont vous avez besoin:
Premier:
register_sidebar( array(
'name' => 'Social Media button',
'id' => 'smb',
'before_widget' => '<li>',
'after_widget' => '</li>',
) );
Deuxième code:
public function widget( $args, $instance ) {
$output = $args['before_widget'];
$output .= '<a href="' . $instance['url'] . '" class="fa fa-' .
$args['icon_title'] . '">' . $instance['title'] . '</a>';
$output .= $args['after_widget'];
echo $output; // <li><a href="[URL]" class="fa fa-[ICON]">[TITLE]</a></li>
}
Le résultat de ces modifications sera:
<h1><li><a href="http://url.com" class="fa fa-">New title</a></li><li><h2 class="widgettitle">test1</h2>
<div class="textwidget">test2</div>
</li></h1>
Et cela ne se fera que dans la barre sociale.