J'essaie d'ajouter un widget de texte avec le titre et le jeu de texte à deux barres latérales personnalisées dans mon thème personnalisé. Mais je ne trouve pas de solution claire pour le faire. J'ai vu des morceaux de code ici et là, mais rien qui décrit clairement le processus d'ajout par programme du widget texte à une barre latérale.
J'ai vu ceci , mais cela tourne autour d'un widget personnalisé, ce que je n'essaie pas de faire.
Edit: J'ai deux barres latérales - footer-left et footer-right. Voici ce que j'ai essayé mais cela n'a pas fonctionné. Alors, quelqu'un peut-il me dire ce que je fais mal?
update_option( 'sidebars_widgets',
array (
'footer-left' => array ( 0 => array( 'title' => 'Test1', 'text' => 'Test 1 Test')),
'footer-right' => array ( 0 => array( 'title' => 'Test2', 'text' => 'Test 2 Test')),
) );
Vous y êtes presque, sauf que les paramètres de chaque widget sont stockés séparément de l'option sidebars_widgets
, qui stocke simplement les "instances" du widget.
Essayez la fonction suivante - vous devrez toujours utiliser register_sidebar
, mais cela simplifiera la tâche pour pré-enregistrer les widgets sur ces barres latérales . Cela permet également de s'assurer que tous les widgets existants et leurs paramètres ne sont pas perdus au cours du processus.
/**
* Pre-configure and save a widget, designed for plugin and theme activation.
*
* @link http://wordpress.stackexchange.com/q/138242/1685
*
* @param string $sidebar The database name of the sidebar to add the widget to.
* @param string $name The database name of the widget.
* @param mixed $args The widget arguments (optional).
*/
function wpse_138242_pre_set_widget( $sidebar, $name, $args = array() ) {
if ( ! $sidebars = get_option( 'sidebars_widgets' ) )
$sidebars = array();
// Create the sidebar if it doesn't exist.
if ( ! isset( $sidebars[ $sidebar ] ) )
$sidebars[ $sidebar ] = array();
// Check for existing saved widgets.
if ( $widget_opts = get_option( "widget_$name" ) ) {
// Get next insert id.
ksort( $widget_opts );
end( $widget_opts );
$insert_id = key( $widget_opts );
} else {
// None existing, start fresh.
$widget_opts = array( '_multiwidget' => 1 );
$insert_id = 0;
}
// Add our settings to the stack.
$widget_opts[ ++$insert_id ] = $args;
// Add our widget!
$sidebars[ $sidebar ][] = "$name-$insert_id";
update_option( 'sidebars_widgets', $sidebars );
update_option( "widget_$name", $widget_opts );
}
Dans ton cas:
wpse_138242_pre_set_widget( 'footer-left', 'text',
array(
'title' => 'Test1',
'text' => 'Test 1 Test',
'filter' => false,
)
);
wpse_138242_pre_set_widget( 'footer-right', 'text',
array(
'title' => 'Test2',
'text' => 'Test 2 Test',
'filter' => false,
)
);