神奈川県行政書士会厚木支部のホームページでは、Wordpressにプラグインを導入して、会員制サイトを実現しています。
使用しているのは無料版のUltimate Memberというプラグインですが、会員制サイトに必要なものは機能もUIも全てそろっており、不満は殆どありません。
開発者の方々には、大変感謝しております。
とは言え、カスタマイズしたいところが無いわけではありません。
具体的には、アカウントのプライバシー設定画面で、不要な項目が幾つかあるのですが、設定では非表示にできません。
それと、ラベルや「?」で表示される説明文が英語のままだったり、文章も少し分かり難いです。
<カスタマイズ前>

ということで、目的に合うようにカスタマイズしてみました。
<カスタマイズ後>

厚木支部には100名以上の行政書士会員がおりますが、行政書士会は強制加入団体であり、各行政書士の活動は様々です。
その様々な活動実態に合うようにプライバシー設定をする必要がありますが、ホームページ管理担当が各行政書士に確認して設定するのは困難ですので、各自で任意に設定できるような画面にしておかなければなりません。
このカスタマイズ後の画面であれば、ほぼ迷うことは無いように思うのですが、どうでしょうか。
次に、その方法ですが、以下のコードをプラグインやスニペットとしてWordpressに読み込ませることで、プライバシー設定画面がカスタマイズされます。
// 「Download your data」と「Erase of your data」を非表示にする
add_action("init", function(){
remove_action( 'um_after_account_privacy', 'um_after_account_privacy' );
});
// 「前回のログインを表示しますか?」を非表示にする
add_filter( 'um_account_tab_privacy_fields', 'my_remove_um_show_last_login', 10, 2 );
function my_remove_um_show_last_login( $args, $shortcode_args ) {
// 文字列の場合(現在)
if ( is_string( $args ) ) {
$args = str_replace(
array( ',um_show_last_login', 'um_show_last_login,', 'um_show_last_login' ),
'',
$args
);
}
// 配列の場合(将来配列に変更された場合の対策)※未検証
if ( is_array( $args ) ) {
foreach ( $args as $key => $field ) {
if ( $field === 'um_show_last_login' ) {
unset( $args[ $key ] );
}
}
}
return $args;
}
// 残った部分のラベルや説明文を分かり易く変更する
add_filter( 'gettext', 'my_um_gettext_replace', 10, 3 );
function my_um_gettext_replace( $translated, $text, $domain ) {
if ( $domain !== 'ultimate-member' ) {
return $translated;
}
$replacements = array(
'プロフィールプライバシー' => '自分のプロフィールを表示できる人は?',
'公開プロフィールを表示できる人' => '(説明文)',
'Avoid indexing my profile by search engines' => '検索エンジンからの検索を回避する?',
'Hide my profile for robots?' => '(説明文)',
'ディレクトリで自分のプロフィールを非表示にする' => '会員紹介でプロフィールを非表示にする?',
'ここで、公開ディレクトリ内でのプロフィール非表示設定ができます' => '(説明文)',
);
if ( isset( $replacements[ $text ] ) ) {
return $replacements[ $text ];
}
return $translated;
}
ちなみに、今回、ChatGPTを活用しましたが、ChatGPTが生成したコードでは動かず、結局、Ultimate Memberの公式リファレンスやGitHubで公開されているソースコードに基づいてフィルターを作成し、ChatGPTに手伝ってもらいながら仕上げました。
ChatGPTは非常に優秀なアシスタントですが、間違うことも多いので、一次情報の確認は欠かすことができません。
この点、あらためて肝に銘じておきたいと思います。
最後に、細かい話になりますが、3つ目の「ラベルや説明文の変更」は、Ultimate Memberで用意されているHookでは実現できませんでした。
内部データの書き換えには成功するのですが、最終的に画面に出力する際、ハードコードされた文字列を参照しているようです。
結局、ChatGPTのアドバイスに従い、Wordpressのgettext Hookによるフィルターとしました。(ChatGPTはこういうところは非常に優秀です)
欠点として、このフィルターは完全一致する文字列を指定する文字列に置き換えるものなので、Ultimate Memberのアップデートがあった場合は、元の文字列が変更されていないか確認する必要があります。
まあ、Wordpressからの通知をONにしておけばプラグインのアップデートはわかるので、そこで確認すればいいだけの話ですが。
ということで、長くなりましたので、この辺で。
