Comment un widget dont une seule instance peut être utilisée?
Un moyen simple serait de définir une variable globale lors de la première exécution du widget et de la vérifier. Ne rien afficher ou message d'information s'il est déjà défini.
Une manière appropriée serait probablement de travailler avec l'interface et de supprimer les widgets disponibles lorsque vous l'ajoutez à la barre latérale, mais c'est un moyen de sortir de ma ligue.
J'ai mis en place le code suivant basé sur la réponse de @ Philip. Semble travailler pour moi. Toutes les suggestions sont les bienvenues!
function mfields_test_single_instance_widget( $args ) {
$args = wp_parse_args( (array) $args, array(
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
print $args['before_title'] . esc_html( $args['widget_name'] ) . $args['after_title'];
print $args['before_widget'] . '<p>THERE CAN BE ONLY ONE!!!</p>' . $args['after_widget'];
}
wp_register_sidebar_widget(
'mfields-test-single-instance-widget',
'Single Instance Widget',
'mfields_test_single_instance_widget',
array( 'classname' => 'mfields-test-single-instance-widget' )
);
Auparavant, j'avais fourni un lien vers un tutoriel, voici un exemple de travail complet. L'exemple @mfields fonctionne très bien, le mien a simplement les champs d'options présents.
/*
* Single Instance Widget with Options
*/
add_action("widgets_init", array('Single_instance_widget', 'register'));
register_activation_hook(__FILE__, array('Single_instance_widget', 'activate'));
register_deactivation_hook(__FILE__, array('Single_instance_widget', 'deactivate'));
class Single_instance_widget
{
function activate()
{
$data = array(
'option1' => 'Default value',
'option2' => 55
);
if (!get_option('wpse_1828_widget'))
{
add_option('wpse_1828_widget', $data);
}
else
{
update_option('wpse_1828_widget', $data);
}
}
function deactivate()
{
delete_option('wpse_1828_widget');
}
function control()
{
$data = get_option('wpse_1828_widget');
echo <<<HTML
<p><label>Option 1<input name="wpse_1828_widget_option1"
type="text" value="{$data['option1']}"/></label></p>
<p><label>Option 2<input name="wpse_1828_widget_option2"
type="text" value="{$data['option2']}"/></label></p>
HTML;
if (isset($_POST['wpse_1828_widget_option1']))
{
$data['option1'] = attribute_escape($_POST['wpse_1828_widget_option1']);
$data['option2'] = attribute_escape($_POST['wpse_1828_widget_option2']);
update_option('wpse_1828_widget', $data);
}
}
function widget($args)
{
echo $args['before_widget'];
echo $args['before_title'] . 'Your widget title' . $args['after_title'];
echo 'I am your widget';
echo $args['after_widget'];
}
function register()
{
wp_register_sidebar_widget('wpse_1828_widget_id', 'Single Instance Widget', array('Single_instance_widget', 'widget'));
wp_register_widget_control('wpse_1828_widget_id', 'Single Instance Widget', array('Single_instance_widget', 'control'));
}
}
vous pouvez créer des widgets activables une fois avec l'ancienne méthode:
<?php
// Custom Widget
function widget_artdev_custom() { ?>
// YOUR CODE-FUNCTIONS HERE
<?php }
if ( function_exists('register_sidebar_widget') )
register_sidebar_widget(__('Custom Widget','artdev'), 'widget_artdev_custom');
?>
n'oubliez pas que ce code peut être utilisé pour les versions> 2.8 et antérieures de wordpress.