Comment ajouter des options de blog personnalisées au nouveau formulaire de configuration de blog?

17

Cela semble être une exigence assez simple, mais j'ai du mal:

  1. Je veux ajouter un champ d'option au "Ajouter un nouveau site" .
    Une simple option de texte est très bien. Comment puis-je faire cela?

  2. Je dois enregistrer cette option de blog personnalisée lors de la création du site.

    Je sais que je peux utiliser le hook 'wpmu_new_blog', qui transmet la $metavariable avec les options fournies, mais je me demande s'il y a un moyen de faire tout cela en une seule étape pour ne pas avoir à effectuer une autre requête DB, ou pire encore , remplacer / remplacer l'ensemble du 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 PHP expérimenté mais je suis encore relativement nouveau dans le piratage de WordPress, alors supposez que je ne suis pas encore intimement familier avec toutes les différentes fonctions et crochets WP.

Brian Lacy
la source

Réponses:

9

En joignant deux réponses (*), j'ai créé un plugin pour ajouter une option 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.

Catégories multisites

entrez la description de l'image ici entrez la description de l'image ici ...

(*) références de code

1 - WordPress + Multisite: Comment ajouter des options de blog personnalisées au formulaire Ajouter un nouveau site dans Network Admin? , par @dennisg

2 - Multisite: Comment ajouter des options de blog personnalisées au nouveau formulaire de configuration de blog? , par @tbuteler

Le a add_action('wpmu_new_blog', 'add_new_blog_field');été fusionné des deux réponses.

J'utilisais déjà le code de la colonne ID dans mon multisite, et j'ai également ajouté la colonne Catégorie dans le plugin.

[mise à jour]

J'ai essayé de rendre la colonne Catégorie triable, mais cela 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 maintenant un Gist (lien mis à jour au début) et la nouvelle version reste dans GitHub.

brasofilo
la source
+1 Hé, c'est génial, brasofilo! J'ai hâte de l'essayer :)
Brian Lacy
8

Le processus d'inscription multisite n'est pas une chose facile à modifier. Il a de nombreux crochets pour jouer, contrairement à d'autres processus, mais ils ne semblent pas trop bien se combiner pour une personnalisation lourde, donc je comprends votre frustration.

Si je comprends bien, ce n'est pas si compliqué de réaliser ce que vous voulez, même si cela ne peut pas être une solution en une étape sans remplacer une grande partie du comportement par défaut de WordPress, principalement en raison 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 réellement créé) se produire 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']);
}

Gardez à l'esprit:

  1. Si vous souhaitez filtrer l'entrée via un plug-in, je vous suggère fortement d'utiliser une entrée de sélection pour verrouiller les options fournies;
  2. Étant donné que certains champs sont obligatoires et passent par la validation lors de l'inscription (caractères minimum, caractères interdits pour le nom du site, noms sur liste noire, etc.), je suggérerais de vérifier votre champ supplémentaire sur le global $ _REQUEST lors du remplissage de la valeur de l'entrée sur le premier , afin que l'utilisateur ne perde pas son entrée au cas où il serait renvoyé pour fixer la valeur des champs par défaut de WordPress;
  3. Vous pouvez évidemment remplacer l'idée de la dernière fonction par celle qui convient le mieux à votre plug-in, mais la valeur du champ sera désormais disponible à partir de cette dernière fonction, ce qui devrait vous aider sur votre chemin.

Sur une note finale, si vous souhaitez traiter toutes les valeurs «extra_field» de tous les blogs existants plus tard, je suggère fortement de stocker les informations sur une seule table; peut-être utiliser à la update_site_optionplace de update_blog_optioncette dernière fonction, perdant le blog_id, qui n'est pas requis dans ce cas.

Quoi qu'il en soit, laissez-nous savoir comment ça se passe, et bonne chance!

Tomas Buteler
la source
Grande réponse utile, beaucoup d'informations que je peux mettre à profit ici :) J'attribue la meilleure réponse à brasofilo uniquement parce que vous avez déjà reçu la prime, et les deux sont d'excellentes réponses.
Brian Lacy
Super réponse ici, merci. Une idée de la raison pour laquelle mon champ supplémentaire est ajouté aux options du site si je ne laisse pas le update_blog_option () s'exécuter? J'ai reproduit les valeurs dans process_extra_field_on_blog_signup () et exit () et cela a fonctionné, extra_filed a été ajouté aux options. Mais quand je le laisse passer sans exit (), alors extra_field n'est PAS ajouté à wp_xx_options.
thatryan
@thatryan, c'est étrange ... Soit quelque chose supprime les valeurs de la base de données (peu probable), soit elles ne sont pas du tout ajoutées. Essayez d'exécuter d'autres tests et n'hésitez pas à publier une question si vous avez du mal à le comprendre. Gardez à l'esprit que cette réponse était probablement pour WordPress 3.5 ou version antérieure, donc ils auraient peut-être changé quelque chose dans les versions plus récentes ...
Tomas Buteler
-1

si vous regardez le code site-new.php, vous auriez déjà obtenu votre réponse - et ce n'est pas le cas!

Il n'y a aucune condition pour vérifier si quelque chose pourrait être ajouté au formulaire. Cependant, j'ai étudié le fichier et je pense que vous devrez ajouter manuellement ce champ de saisie dans site-new.php et passer la valeur en tant que méta dans le tableau à la fonction wpmu_create_blog que vous trouverez quelque part près de la ligne 77. NON TESTÉ mais en train de lire sur ce que fait la fonction, il peut être ce que vous recherchez.

george.n
la source