ホームページ  >  に質問  >  本文

メニューを特定のユーザーに制限する: 特定のフィールドの値に基づいてフィルタリングする方法

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

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

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

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

ああああ

P粉563831052P粉563831052380日前440

全員に返信(2)返信します

  • P粉578680675

    P粉5786806752023-09-08 13:32:38

    提供されたコードはほとんど正しいです。ただし、ユーザー関係値をチェックする際の条件文に小さな問題があります。コードを更新して、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

    P粉7998853112023-09-08 13:31:29

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

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

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

    返事
    0
  • キャンセル返事