web-dev-qa-db-fra.com

Obtenir une liste de tous les champs disponibles dans le profil utilisateur

Par défaut, la page Profil utilisateur contient quelques options et champs que l'utilisateur peut définir. Tels que les suivants:

Personal Options
-- Visual Editor
-- Admin Color Scheme
-- Keyboard Shortcuts
-- Toolbar
Name
-- First Name
-- Last Name
-- Nickname
-- Display Name
Contact Info
-- Website
About Yourself
-- Biographical Info
-- Avatar Display

Dans mon plugin, Désactiver Blogging , j'ai ajouté une page de paramètres qui répertorie tous ces champs dans des cases à cocher pour choisir celles à masquer ( voir capture d'écran ).

Toutefois, en fonction du plugin ou du thème que vous utilisez, des paramètres et des champs supplémentaires s'afficheront. Prenez par exemple le plug-in Yoast SEO , qui ajoute ces champs supplémentaires dans la section Informations de contact et une section distincte:

Contact Info
-- Website
-- Google+
-- Twitter username (without @)
-- Facebook profile URL
...
Yoast SEO
-- Title to use for Author page
-- Meta description to use for Author page
-- Exclude user from Author-sitemap
-- Disable SEO analysis
-- Disable readability analysis

En utilisant la fonction wp_get_user_contact_methods() , j’ai pu facilement echo une liste des champs de contact personnalisés ajoutés par le plug-in Yoast SEO , comme suit:

add_action( 'personal_options', 'wpse_237504_user_profile_fields' );
function wpse_237504_user_profile_fields() {
    foreach ( wp_get_user_contact_methods() as $id => $label ) {
        echo( $label . " > " . $id . "<br>" );
    }
}

Sortie:

Google+ > googleplus
Twitter username (without @) > Twitter
Facebook profile URL > facebook

Malheureusement, je ne vois pas de fonction WordPress native que je puisse appeler pour obtenir tous les champs répertoriés dans le profil utilisateur.

Le Disable Blogging plugin masque ces champs en utilisant JavaScript basé sur les valeurs for= définies dans chaque <label>. Par exemple: <label for="user_login">Username</label>

?>
<script type="text/javascript">
    jQuery( document ).ready( function( $ ) {
    $( 'form#your-profile > h2' ).hide();
    <?php
        foreach ( $profile_fields as $label ) {
            echo( "$( '#" . $label . "' ).closest( 'tr' ).hide(); " );
        }
    ?>
    } );
</script>
<?php

But général

Bien que cela fonctionne pour tous les champs de profil utilisateur que j'ai listés manuellement dans le plugin, mon objectif général pour cette question est d'obtenir automatiquement une liste de tous les champs disponibles (natifs et personnalisés) dans le profil utilisateur sans avoir à les lister manuellement. dans mon plugin.

Ainsi, lorsqu'un utilisateur utilisant le plug-in Disable Blogging plugin souhaite masquer les fichiers de profil créés par un autre plugin ou thème, celui-ci est automatiquement répertorié en tant que case à cocher.


Bien que je ne demande à personne d'écrire tout le code pour moi (même si cela ne me dérange pas et que je serai heureux de vous ajouter en tant que contributeur), j'accepterai des réponses partielles pour m'aider à compléter. cette fonction ou montrez-moi une autre façon d'obtenir les mêmes résultats.

Si vous n'êtes pas sûr de quelque chose, déposez un commentaire ou un message sur The Loop pour une réponse plus rapide

6

Le second paramètre dans get_user_meta est facultatif. Vous pouvez ainsi récupérer toutes les méta de l'utilisateur comme ceci (code testé rapidement dans mon installation):

$cu = get_current_user_id ();
$um = get_user_meta ($cu);
var_dump ($um);

Cela inclut également les méta-champs masqués sur la page de profil de l'utilisateur.

2
cjbj