web-dev-qa-db-fra.com

Comment ajouter un widget de texte lors de l'activation du thème

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')), 
        ) );
1
geoff swartz

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,
    )
);
0
TheDeadMedic