web-dev-qa-db-ja.com

ユーザープロファイルのすべての利用可能なフィールドのリストを取得します

デフォルトでは、User Profileページには、ユーザーが設定できるいくつかのオプションとフィールドがあります。次のように

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

私のプラグイン、 Bloggingの無効化 では、非表示にする項目を切り替えるためのチェックボックスにこれらのすべてのフィールドをリストする設定ページを追加しました( スクリーンショット参照) )。

ただし、使用しているプラ​​グインやテーマによっては、追加の設定や表示されるフィールドがあります。例として Yoast SEO プラグインを取ります。これはこれらの 連絡先情報セクションの下の追加フィールド と独自のセクションを追加します。

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

wp_get_user_contact_methods() 関数を使うことで、私は Yoast SEO プラグインによって追加されたカスタムの連絡先フィールドのリストを簡単にechoすることができました:

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>" );
    }
}

出力:

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

残念ながら、User Profileにリストされているすべてのフィールドを取得するために呼び出すことができるネイティブのWordPress関数は表示されません。

ブログを無効にする プラグインは、これらのフィールドを非表示にします。各for=に設定された<label>値に基づいてJavaScriptを使用します。例えば、次のとおりです。<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

全体的な目標

これは私がプラグインに手動でリストしたすべてのUser Profileフィールドに対して機能しますが、この質問の全体的な目標は、手動でリストしなくてもUser Profileのすべての使用可能フィールド(ネイティブおよびカスタム)のリストを自動的に取得することです。私のプラグインで。

このように、 ブログを無効にする プラグインを使用しているユーザーが、別のプラグインやテーマによって作成されたプロファイルファイルを非表示にしたい場合、自動的にチェックボックスとして表示されます。


私は誰にも私のためにコード全体を書くように頼んではいませんが( どちらでも構わないし、貢献者としてあなたを追加してもいいです )、私は私が完成するのを助けるために部分的な答えを受け入れますこの関数または私に同じ結果を得るための代替方法を見せる。

よくわからないことがある場合は、コメントを投稿するか、 The Loop に私にメッセージを送ってください。

get_user_meta の2番目のパラメータはオプションなので、すべてのユーザーメタを次のように取得できます(私のインストールではコードがすぐにテストされます)。

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

これには、ユーザープロファイルページに隠されているメタフィールドも含まれます。

2
cjbj