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
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.
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.