web-dev-qa-db-ja.com

管理者以外のメタボックスを隠す

私はレビューベースのワードプレスサイトを持っています。そこには、ユーザーがレビューできる各会社のページがあります。私が使用しているテーマは "review"と呼ばれるカスタム投稿タイプを追加しており、これらのレビューページの一部を変更できる限定ユーザーアカウントを作成するためにPress Permitを使用しています。

Yoast SEO、Gd Star Ratingsなど、アクセスできないメタボックスの一部を非表示にしたいと思いました。このWebサイトの他の投稿からの指示に従いましたが、メタボックスは非表示にする必要はありません。 。

Yoastによる WordPress SEOの指示に従って、私のテーマディレクトリの "functions.php"の最後に次のコードを追加しました。管理者以外の投稿のメタボックスを隠す

add_action('add_meta_boxes', 'hide_yoastseo_metabox', 99);

function hide_yoastseo_metabox()
{
    if (!current_user_can('activate_plugins'))
    {
        remove_meta_box('wpseo_meta', 'review', 'normal');
    }
}
2
Aidan Knight

ここでadd_action()呼び出しの優先度を下げると役に立ちますか?これは Kid Slimmer および Piet によってあなたにリンクされたまさにこの投稿で言及されました→ https://wordpress.stackexchange.com/a/91184/33604

それらのコード例では、10000の代わりに99の優先度を使用しています。使用しているように、優先度を500または1000または何かに変更してみてください。何か変わった場合。

また、ユーザーの能力をチェックすることでより良い運が得られる場合がありますbeforeアクション自体を追加します。これは、上記でリンクしたコメントでも説明されています。

そのため、たとえば、次のようなものがありますmight

if( ! current_user_can('activate_plugins') ) {
    add_action('add_meta_boxes', 'hide_yoastseo_metabox', 1000);
}

function hide_yoastseo_metabox() {
    remove_meta_box('wpseo_meta', 'review', 'normal');
}

これらの推奨事項以外に、考えられる唯一のことは、remove_meta_box()のすべての値を再確認することです。'wpseo_meta'が、目的のYoastメタボックスの適切なメタボックスIDであることを確認してくださいremove、'review'はメタボックスを非表示にする適切な投稿タイプであり、'normal'はターゲットとするメタボックスの適切な優先度です。 remove_meta_box()here の詳細を読むことができます。

Also、ここであなたの知性をin辱するためではありませんが、私は興味があります:さまざまな機能レベルで「レビュー」投稿タイプ編集画面にアクセスしていますか?フル機能のスーパー管理者アカウントから管理者のアイテムのみを表示している場合、機能が制限されたアカウントにのみ適用されるコードは実行されません。テストする機能が制限されたテストアカウントを持っていることを確認し、そのアカウント内から物事を表示してみてください。

1
George G.
function your_function() {
    global $current_user;
    if($current_user->roles[0] == 'administrator') {
        add_meta_box(your parameters);
        // fill in your parameters
    }
}
add_action('admin_init','your_function');
0
Owais Alam