YoastによるWordPress SEO:非管理者向けの投稿でメタボックスを非表示にする


9

私は複数の著者のウェブサイトを持っていて、すべてのメンバーが彼らが公開している投稿にSEOの詳細を入力することを許可するのはあまり快適ではありません。これはWebサイトの管理者にのみ表示されます。何か案は?

回答:


19

Yoast SEOプラグインサイトのAPIドキュメントには何が記載IDされているのか、私はYoastのコピーを自由にインストールできませんが、yoas-plugin-dir/admin/class-metabox.php144行目によると、meta_boxは登録されています。

add_meta_box( 'wpseo_meta', ...etc ); ...

add_meta_boxes同じファイルの32行目のフックにフックされていますが、

add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );

もちろん、投稿編集画面のメタボックス自体からIDを取得することもできます...とにかく。

次のことができます。

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //capability of 'manage_plugins' equals admin, therefore if NOT administrator
    //hide the meta box from all other roles on the following 'post_type' 
    //such as post, page, custom_post_type, etc
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

...ここで、投稿タイプは、この制限を適用するpost投稿タイプ、またはカスタム投稿タイプなどです。

トリックを行う必要があります。

更新:されるmanage_pluginsべきactivate_pluginsでした-賞賛されました。


16
の+1 yoast_is_toast()
カイザー2012年

@Ahmad Mは提案された編集に感謝しますが、$post_typevarおよびaction引数パラメーターはこのインスタンスでは必要なく、通知/エラーをスローしません。また、$post_typevar を含める場合は、他の場所で行わなかった関数内で投稿タイプを定義する必要があるため、ユーザーがこれを実行すると、正しく機能しなくなります。この場合、投稿タイプ名を'post'直接remove_meta_box関数として渡すことは完全に許容されます。とにかく提案をありがとう。
アダム

@userabuser:明確化に感謝しますが、$post_typeすでに定義されており、add_meta_boxesアクションフック関数で使用する準備ができています。このアクションフックのAdam Brownソースビューを参照してください。利用$post_typeこのケースでは、のコードを独立させるだろうpost_type、それは削除されますを意味し、編集画面をwpseo_metaからメタボックスをすべてそれが発見されたポストの種類、およびケースで何も返さないだろうwpseo_metaが見つかりません。
Ahmad M

@AhmadMありがとうメイト。varが既に定義されていることは承知していますが、フック/関数に渡す必要はありません。この場合、OPはpostpost_type からメタボックスを削除する必要があるため、最初のソリューションでは詳細な制御が可能です。ただし、すべての投稿タイプから削除する場合は、すでに定義されている変数を使用するだけ$post_typeで十分です。私がすることは、私の回答を編集して$post_type、誰かがすべての登録済みpost_typesにこれを適用したい状況で変数を使用する追加の例を含めることです。
アダム

5

YoastによるWordPress SEOプラグインAPI Docsfunctions.phpに従って、これをプラグインまたはテーマファイルに貼り付けてみてください。

if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
    add_filter('wpseo_use_page_analysis', '__return_false');
}

エラーを回避するには...これは、何かを非表示にする前に、関数が存在することを確認して、プラグインを非アクティブ化し、エラーをスローしないようにします。

initこれを正しく動作させるためにフックする必要があるかもしれません。これは次のように行うことができます:

function wpse_init(){
    if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
        add_filter('wpseo_use_page_analysis', '__return_false');
    }   
}
add_action('init', 'wpse_init');

4

remove_meta_box関数を使用して削除できます。

if ( ! current_user_can( 'edit_pages' ) ) {
    add_action( 'add_meta_boxes', 'my_remove_wp_seo_meta_box', 100000 );
}

function my_remove_wp_seo_meta_box() {
    remove_meta_box( 'wpseo_meta', 'post', 'normal' );
}

add_actionの100000に注目してください。これにより、WP SEOメタボックスがフックされた後にこれが確実に実行されます。


2

Adminimizeプラグインを使用して、役割に応じてユーザーからアイテムを非表示にすることができます。これを使用して、Yoast SEO機能をクライアントから隠し、バックエンドを簡素化しました。

http://wordpress.org/extend/plugins/adminimize/

非表示にするアイテムのcssセレクターを追加することで、非常に簡単に使用できます。これを使用してSEOページ分析タブを非表示にしました(#linkdex)


0

さて、管理者以外のWordPress SEO設定の高度な部分を無効にするためのYoastによるWordPress SEOの設定オプションがあります。ボックスを完全に無効にする場合は、他のプラグインを使用して、管理者以外の投稿エディターページ要素を削除できます。たとえば、管理者以外の投稿エディターからWordPress SEOボックスを削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.