Cela semble être une exigence assez simple, mais j'ai du mal à:
Je souhaite ajouter un champ d’option au champ "Ajouter un nouveau site" .
Une simple option de texte convient. Comment puis-je faire cela?
Je dois enregistrer cette option de blog personnalisé lorsque le site est créé.
Je sais que je peux utiliser le hook 'wpmu_new_blog', qui transmet la variable $meta
avec les options fournies, mais je me demande s'il existe un moyen de faire tout cela en une seule étape afin de ne pas avoir à exécuter une autre requête de base de données, ou pire. pourtant, remplacer/remplacer tout le processus de création de site?
Remarques:
J'utilise WP 3.3.1 avec une configuration MultiSite. J'écris un plugin qui répertorie tous les sites qui correspondent à la valeur de champ personnalisé spécifiée (appelons-le "type").
De plus, je suis un développeur expérimenté PHP mais je suis encore relativement nouveau en piratage WordPress. Veuillez donc supposer que je ne connais pas encore très bien toutes les diverses fonctions WP et les points d'ancrage. .
En joignant deux réponses (*), j'ai créé un plugin pour ajouter une option de méta personnalisée lors de l'enregistrement d'un nouveau site (frontal et principal) et afficher sa valeur dans une colonne de l'écran Sites.
...
(*) références de code
1 - WordPress + Multisite: Comment ajouter des options de blog personnalisées au formulaire Ajouter un nouveau site dans Admin réseau? , par @dennisg
2 - Multisite: Comment ajouter des options de blog personnalisées à un nouveau formulaire de configuration de blog? , par @tbuteler
La add_action('wpmu_new_blog', 'add_new_blog_field');
a été fusionnée à partir des deux réponses.
J'utilisais déjà le code de colonne ID dans mon multisite et j'ai également ajouté la colonne Catégorie dans le plug-in.
[update]
Essayé de rendre la colonne Catégorie triable, mais semble presque insoluble ...
Voir cette question/réponse: Les filtres 'request' et 'parse_query' ne se déclenchent pas dans sites.php ni link-manager.php
[mise à jour 2]
J'ai retravaillé le plugin et maintenant les catégories sont triables. La première version du plugin est un Gist maintenant (lien mis à jour au début) et la nouvelle version reste dans GitHub.
Le processus d'inscription multisite n'est pas une chose facile à modifier. Contrairement aux autres processus, il comporte de nombreux crochets, mais ils ne semblent pas très bien fonctionner ensemble pour une personnalisation poussée. Je comprends donc votre frustration.
Si je comprends bien, il n’est pas si compliqué d’atteindre ce que vous voulez, bien que cela ne puisse pas être une solution en une étape sans surcharger le comportement par défaut de WordPress, principalement à cause de l’inscription (c'est-à-dire lorsque votre utilisateur soumettra les informations personnalisées) et de l'activation ( c'est-à-dire quand le nouveau blog sera créé) se déroulent séparément.
Voici un code très approximatif dont vous aurez besoin pour commencer. Espérons que cela vous oriente dans la bonne direction:
// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
<label>An extra field</label>
<input type="text" name="extra_field" value="" />
<?php
}
// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
if(isset($_REQUEST['extra_field'])) {
$meta['extra_field'] = $_REQUEST['extra_field'];
}
return $meta;
}
// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}
Garder en tete:
Sur une note finale, si vous souhaitez traiter plus tard toutes les valeurs 'extra_field' de tous les blogs existants, je suggérerais fortement de stocker les informations sur une seule table; peut-être utiliser update_site_option
au lieu de update_blog_option
sur cette dernière fonction, en perdant le blog_id, ce qui n'est pas nécessaire dans ce cas.
Quoi qu'il en soit, laissez-nous savoir comment ça se passe, et bonne chance!