メニューを特定のユーザーに制限する: 特定のフィールドの値に基づいてフィルタリングする方法
P粉563831052
P粉563831052 2023-09-07 15:58:31
0
2
484

私のメインの WP ナビゲーションバーには、WordPress のリサーチャーにのみ表示したい「リサーチ」というメニュー項目があります。

研究者は、wpum_relationship_to_lib というユーザー メタデータ フィールドによって定義されます。これは、研究者、学生、従業員などのオプションを含む複数選択フィールドです。

researcher はユーザーがこのメニューにアクセスするために選択するオプションの 1 つである必要があり、wpum_relationship_to_lib は WordPress ロールを定義しないことが重要です。

すべてのメニューはメインメニューです。また、ログインするまでメニューを非表示にする必要があります。メニューを正しく制限していない私のコードを参照してください。

ああああ

P粉563831052
P粉563831052

全員に返信(2)
P粉578680675

提供されたコードはほとんど正しいです。ただし、ユーザー関係値をチェックする際の条件文に小さな問題があります。コードを更新して、wpum_relationship_to_lib メタ フィールドの関係値の 1 つとして「researcher」を選択したユーザーにのみ「Research」メニュー項目が表示されるようにしました。また、ログインしていないユーザーに対しては [リサーチ] メニューも非表示になります。コードをテストしていないので、コメントは大歓迎です。 #joshmoto のコードは有効ですが、foreach ループ内の条件 !in_array($menu_object->title, $relationship_array) は、メニュー オブジェクトのタイトルがリレーションシップ配列内にないかどうかをチェックします。質問から理解できることによると、値「researcher」がリレーショナル配列にあるかどうかを確認したいということです。したがって、条件を in_array('researcher', $relationship_array) に更新する必要があります。

リーリー
いいねを押す +0
P粉799885311

答えが出ました。興味深いのは、大文字と小文字が区別されることです。次のコードを使用するだけです。ただし、テスト プラットフォームでは、このコード行がなくても動作します。これが小文字の場合があるとは知りませんでした:

(is_array($relationship_values) && in_array('researcher', array_map('strto lower', $relationship_values))) { ...

皆さん、ご協力、お時間をいただきありがとうございました。 –

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート