it-swarm.com.de

Kopieren Sie Widget-Einstellungen von einem Blog in ein anderes

Ich versuche, 'wpmu_new_blog' in ein Plugin einzubinden, damit ich die Widget-Einstellungen von einem Blog in das neue Blog kopieren kann, das erstellt wird.

Weiß jemand, ob es WordPress-Funktionen gibt, um dies zu erreichen, oder sollte ich nur direktes SQL verwenden?

Danke, Dave

3
Dave Morris

Ich glaube nicht, dass es etwas spezielles dafür gibt. Vielleicht möchten Sie sich den Plugin-Code ansehen, um nach Aufrufen von get_option() zu suchen und herauszufinden, welche Schlüssel sie verwenden. Durchsuchen Sie dann die DB-Tabelle wp_options mit phpMyAdmin (oder was auch immer) und greifen Sie auf die zugehörigen Werte zu.

Ohne spezielle Unterstützung durch das Plugin kann dies problematisch sein, da möglicherweise andere kontextabhängige Informationen auf der neuen Site enthalten sind, die Sie nicht möchten.

2
Peter Rowell

Dieses Problem konnte manuell gelöst werden, indem wpmu_new_blog mit folgendem Code verknüpft wurde:

global $wpdb;

$option_names = $wpdb->get_results("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE 'widget_%' OR option_name LIKE 'sidebars_%';");

$widget_options = array();
foreach ($option_names as $option_name) {
    $widget_options["$option_name->option_name"] = get_option($option_name->option_name);
}

switch_to_blog($blog_id);

delete_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) );
delete_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) );
delete_option( 'widget_recent-comments', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) );
delete_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) );
delete_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) );
delete_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) );

foreach ($widget_options as $option_name => $option_value) {
    update_option($option_name, $option_value);
}

restore_current_blog();

Nicht der beste Code der Welt, aber ich nehme an, er erledigt die Arbeit.

2
Dave Morris