Comment ajouter des options de blog personnalisées au nouveau formulaire d'installation de blog?

15

Cela semble être une exigence assez simple, mais je me bats:

  1. Je souhaite ajouter un champ d'option au champ "Ajouter un nouveau site" .
    Une simple option de texte est 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 variable $meta avec les options fournies, mais je me demande s'il est possible de faire tout cela en une étape, pour ne pas avoir à en effectuer une autre. Requête de base de données 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 correspondant à la valeur de champ personnalisée spécifiée (appelons-le "type").

De plus, je suis un développeur PHP expérimenté, mais le piratage WordPress étant encore relativement nouveau, supposez donc que je ne connais pas encore très bien les diverses fonctions et fonctions de WP.

    
posée Brian Lacy 25.04.2012 - 22:12

3 réponses

9

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.

Catégories multisites

...

(*) références de code

1 - WordPress + Multisite: comment ajouter des options de blog personnalisées au formulaire Ajouter un nouveau site dans l'administrateur réseau? , par @dennisg

2 - multisite: comment ajouter des options de blog personnalisées à un nouveau formulaire de configuration de blog? , par @tbuteler

Le add_action('wpmu_new_blog', 'add_new_blog_field'); a été fusionné à partir 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 plug-in.

[mise à jour]

J'ai essayé de rendre la colonne Catégorie triable, mais cela semble presque impossible à résoudre ...

Voir cette question / réponse: Les filtres "requête" 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. .

    
réponse donnée brasofilo 02.05.2012 - 22:36
8

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, réaliser ce que vous voulez n'est pas si compliqué, même s'il ne peut s'agir d'une solution en une étape sans surcharger le comportement par défaut de WordPress, principalement en raison de votre inscription (c'est-à-dire lorsque l'utilisateur soumettra les informations personnalisées) et l'activation (c'est-à-dire lorsque le nouveau blog sera créé) s'effectue 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 voulez filtrer l'entrée via un plug-in, je voudrais strongment suggère d'utiliser une entrée de sélection pour verrouiller les options fournies;
  2. Comme certains champs sont obligatoires et passent par validation pendant enregistrement (caractères minimum, caractères non autorisés pour le site) nom, noms sur la liste noire, etc.), je vous conseillerais de vérifier votre champ supplémentaire sur le $ _REQUEST global lors du remplissage de la valeur du entrée sur la première fonction, pour que l'utilisateur ne perde pas sa saisie s'il est renvoyé pour corriger la valeur des champs par défaut de WordPress;
  3. Vous pouvez évidemment remplacer l’idée de la dernière fonction par ce 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 votre chemin.

Enfin, si vous souhaitez traiter ultérieurement toutes les valeurs "extra_field" de tous les blogs existants, je vous suggère strongment 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!

    
réponse donnée Tomas Buteler 29.04.2012 - 02:34
-1

si vous consultez le code de site-new.php, vous obtiendrez déjà votre réponse - et ce n’est pas le cas!

Il n’existe aucune condition permettant de vérifier si quelque chose peut ê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 transmettre la valeur méta du tableau à la fonction wpmu_create_blog que vous trouverez quelque part près de la ligne 77. NOT TESTED mais read sur ce que la fonction fait-il peut être ce que vous recherchez.

    
réponse donnée george.n 28.04.2012 - 23:18

Lire d'autres questions sur les étiquettes