web-dev-qa-db-fra.com

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

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

  1. Je souhaite ajouter un champ d’option au champ "Ajouter un nouveau site" .
    Une simple option de texte convient. Comment puis-je faire cela?

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

16
Brian Lacy

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

enter image description hereenter image description here ...

(*) 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.

9
brasofilo

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:

  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’enregistrement (minimum de caractères, caractères non autorisés pour le nom du site, les noms sur la liste noire, etc.), je suggère de rechercher votre champ supplémentaire dans la variable globale $ _REQUEST lors de l’enrichissement de la valeur de la première entrée. fonction, de sorte que l'utilisateur ne perde pas sa saisie au cas où il serait 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 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 dans votre cheminement.

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!

8
Tomas Buteler