web-dev-qa-db-fra.com

Copier les paramètres du widget d'un blog à un autre

J'essaie d'inclure "wpmu_new_blog" dans un plugin afin de pouvoir copier les paramètres de widget d'un blog vers le nouveau blog en cours de création.

Est-ce que quelqu'un sait s'il existe des fonctions WordPress pour accomplir cela, ou devrais-je simplement utiliser du SQL pur?

Merci Dave

3
Dave Morris

Je ne pense pas qu'il y ait quoi que ce soit spécifiquement pour cela. Vous voudrez peut-être consulter le code du plug-in pour rechercher les appels à get_option() et voir quelles clés ils utilisent, puis parcourir la table de base de données wp_options avec phpMyAdmin (ou autre) et récupérer les valeurs associées.

Sans un soutien spécifique de la part du plug-in, cela peut être difficile, car il peut y avoir d'autres informations dépendantes du contexte, que vous ne voulez pas sur le nouveau site.

2
Peter Rowell

Nous avons réussi à résoudre ce problème manuellement en accrochant wpmu_new_blog avec ce code:

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();

Ce n'est pas le meilleur code au monde, mais je suppose que le travail est fait.

2
Dave Morris