web-dev-qa-db-fra.com

Un simple administrateur peut-il enregistrer des options dans un multisite?

Je développe un plugin personnalisé sur une installation multisite avec laquelle je ne suis malheureusement pas habitué à travailler.

C’est le problème: j’ai besoin d’ajouter un champ à la page de profil d’un utilisateur et j’ai besoin que la valeur à insérer soit stockée en tant que méta utilisateur et également en tant qu’option (à l’intérieur de la table wp_options).

Tout fonctionne bien si je suis le super administrateur, l'option sera stockée et je pourrai les utiliser plus tard dans mon thème, mais lorsque j'essaie de stocker les valeurs avec la fonction update_option(), je ne peux pas le faire et je ne peux pas stocker les valeurs. .

Ici vous pouvez trouver mon code de test, mais veuillez noter que même si je n’ai aucun problème avec la fonction update_usermeta(), je ne peux pas stocker mes informations dans la table wp_options ...

function ohw_update_field( $user_id ){
    $field = 'side_banner_' . $user_id;
    $side_ad = $_POST[ $name ];
    update_usermeta( $user_id, $name, $side_ad );
    update_option( $name, $side_ad );
}

add_action( 'personal_options_update', 'ohw_update_field' );
add_action( 'edit_user_profile_update', 'ohw_update_field' );

Comme vous pouvez le constater, j'essaie d'utiliser le $user_id pour créer un champ unique dans la table. Je vais probablement commencer à utiliser un tableau pour sérialiser les informations dans un champ unique, mais j'aimerais comprendre pourquoi l'administrateur d'un fichier. site du réseau n'est pas en mesure de sauvegarder une option ...

Je veux dire, comme je l'ai lu dans le Codex, un utilisateur devrait avoir la capacité manage_options afin d'accéder à cette base de données, alors pourquoi seul le super-administrateur est-il capable de le faire?

Merci d'avance pour toutes les réponses et bonne journée!

2
Andrea Barghigiani
update_option( $name, $side_ad );

Votre problème ici est que update_option stocke la valeur dans la table des options du site. Cependant, vous êtes sur un multisite et votre installation contient plusieurs sites/blogs, chacun avec ses propres tables d'options.

En conséquence, la modification d'un utilisateur sur le blog/le site A ne modifiera pas l'option du blog/le site B, de la même manière que peindre un mur vert dans votre maison ne rend pas le même mur vert chez moi. Si ce n'était pas le cas, la mise à jour du titre d'un site mettrait à jour le titre de tous les sites.

Alors:

Je veux stocker des données spécifiques à l'utilisateur

Stockez-le dans la méta de l'utilisateur

Je veux stocker des données spécifiques au blog

Stockez-le dans une option. L’écran de modification de l’utilisateur n’est pas un endroit approprié pour cette option; placez-le sur un écran de paramètres dans le menu des paramètres.

Je souhaite stocker des données qui concernent l'ensemble de l'installation, quel que soit le blog/l'utilisateur/le site.

Utilisez update_site_option et vérifiez d’abord si le multisite utilise is_multisite(). Ne stockez pas une grande quantité de données de cette manière. Encore une fois, ces types d’options n’appartiennent pas à une page utilisateur de modification/mise à jour. Ne placez pas la page des options sous les paramètres normaux du tableau de bord non plus, mais placez-les dans le panneau d'administration réseau

4
Tom J Nowell