it-swarm.com.de

Wie füge ich ein Widget programmgesteuert zu einer neu erstellten Site (WPMU) in einem Plugin hinzu?

Ich erstelle ein Plugin, mit dem neue Websites (WPMU) erstellt werden. Außerdem wird ein eigenes Widget erstellt, das auf den neu erstellten Websites platziert werden muss.

Das Problem, das ich habe, ist, dass ich das Plugin nicht zum Einfügen auf die neu erstellte Site bringen kann (ich möchte, dass es alle Widgets durch meine ersetzt). Es macht es halb, in dem Sinne, dass es das Plugin in einen "inaktiven" Zustand versetzt, anstatt in der Seitenleiste.

Hier ist der Code, den ich habe:

function se160609($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    switch_to_blog($blog_id);

    switch_theme("twentytwelve");

    register_sidebar(
        array (  
            'name'          => 'Main Sidebar',
            'id'            => 'sidebar-1',
            'before_widget' => '',
            'after_widget'  => '',
            'before_title'  => '',
            'after_title'   => '',
        )
    );

    update_option('widget_mywidget',
        array(
            'title' => 'Policies'
        )
    );

    update_option('sidebars_widgets',
        array(
             'sidebar-1' => array('mywidget')
        )
    );

    restore_current_blog();
}

add_action('wpmu_new_blog', 'se160609');

Ich habe auch diese Widgets zum Registrieren (und Abmelden):

function se160609_load_widget() {
    register_widget( 'MyWidget' );

    unregister_widget( 'WP_Widget_Archives' );
    unregister_widget( 'WP_Widget_Calendar' );
    unregister_widget( 'WP_Widget_Categories' );
    unregister_widget( 'WP_Widget_Links' );
    unregister_widget( 'WP_Widget_Meta' );
    unregister_widget( 'WP_Widget_Pages' );
    unregister_widget( 'WP_Widget_Recent_Comments' );
    unregister_widget( 'WP_Widget_Recent_Posts' );
    unregister_widget( 'WP_Widget_RSS' );
    unregister_widget( 'WP_Widget_Search' );
    unregister_widget( 'WP_Widget_Tag_Cloud' );
    unregister_widget( 'WP_Widget_Text' );
}
add_action( 'widgets_init', 'se160609_load_widget' );
3
hazrpg

Scheint, die Antwort war viel einfacher als ich dachte, also dachte ich, ich würde die Antwort für diejenigen teilen, die auch über dieses Problem stolpern.

Offensichtlich fehlte etwas in der Datenbank, das benötigt wurde, so dass ich auch einen SQL-Speicherauszug der Datenbank vor und nach dem Ziehen in einem Widget habe. Dann verglichen die Änderungen, die passiert sind. Dies half mir zu analysieren, was eingegeben werden musste. Das Ergebnis war, dass ich meine Widget-Einstellungen nicht richtig eingegeben habe. Einfach ausgedrückt, ich habe hinzugefügt

Array
(
    [title] => Policies
)

Wenn WordPress erwartet hatte:

Array
(
    [2] => Array
        (
            [title] => Policies
            [_multiwidget] => 1
        )
)

Mein Code sah also ungefähr so ​​aus:

function se160609($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    // Switch the newly created blog.
    switch_to_blog($blog_id);

        // Change to a different theme.
        switch_theme("twentytwelve");

        // Add WordPress options that the widget needs.
        $widget_mywidget = array();
        $widget_mywidget[2]['title'] = "Policies";
        $widget_mywidget[2]['_multiwidget'] = 1;
        update_option( 'widget_mywidget', $widget_mywidget );

        // Add WordPress options to override the default widgets.
        $sidebar_widgets = get_option( 'sidebars_widgets' );
        $sidebar_widgets['sidebar-1'] =  array('mywidget-2');
        update_option( 'sidebars_widgets', $sidebar_widgets );

    // Restore the current blog.
    restore_current_blog();
}
add_action('wpmu_new_blog', 'se160609');

Beachten Sie, dass der erste Teil des Arrays [2] ist. Dies ist die Instanznummer des Widgets. Widgets können mehrmals hinzugefügt werden. Wenn Sie also mehr als ein Widget haben möchten, können Sie im Wesentlichen ein solches erstellen das Array durch Inkrementieren von Nummer 2. Es könnte funktionieren, indem Sie ihm die Nummer 1 geben, aber 2 scheint aus irgendeinem Grund die beste Startnummer zu sein (die Nummer, die zuerst zugewiesen wird, wenn eine neue Site mit mehreren Standorten für Standardwidgets erstellt wird) beim Ziehen und Ablegen).

[_multiwidget] Ich habe es nicht vollständig verstanden, aber ich gehe davon aus, dass ich ein Plugin für wpmu erstelle. Dadurch wird das Widget so eingestellt, dass es in Umgebungen mit mehreren Standorten angezeigt wird (bitte korrigieren Sie mich, wenn ich mich irre).

2
hazrpg