SEO WordPress oleh Yoast: Sembunyikan Kotak Meta di Posting untuk Non-admin

9

Saya memiliki situs web multi-penulis dan saya tidak terlalu nyaman untuk mengizinkan semua anggota untuk memasukkan rincian SEO dalam posting yang mereka terbitkan. Saya ingin ini hanya akan terlihat oleh Administrator situs web. Ada ide?

Audrius
sumber

Jawaban:

19

Itu tidak mengatakan dalam dokumen API di situs plugin Yoast SEO apa yang IDdulu dan saya tidak punya salinan Yoast diinstal pada pembuangan, tetapi menurut yoas-plugin-dir/admin/class-metabox.phpbaris 144, meta_box terdaftar adalah;

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

Yang terhubung ke add_meta_boxeskait pada baris 32 dari file yang sama,

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

Tentu saja Anda bisa mendapatkan ID dari kotak meta itu sendiri di layar edit posting ... Pokoknya.

Anda dapat melakukan hal berikut,

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');
    }
}

... di mana jenis kiriman adalah jenis kiriman yang ingin Anda terapkan juga pembatasan ini, seperti postatau jenis kiriman khusus satu atau lebih!

Sebaiknya lakukan triknya.

pembaruan: manage_pluginsseharusnya activate_plugins- diubah.

Adam
sumber
16
+1 untuk yoast_is_toast().
kaiser
@Ahmad M terima kasih untuk edit yang disarankan tetapi $post_typeparameter argumen aksi dan var tidak diperlukan dalam hal ini dan tidak membuang pemberitahuan / kesalahan. Juga jika Anda memasukkan $post_typevar, Anda perlu mendefinisikan jenis posting di dalam fungsi di tempat lain yang tidak Anda lakukan, jadi pengguna akan menjalankan ini agar berfungsi dengan tidak benar! Dalam hal ini dapat diterima untuk 'post'memasukkan nama jenis posting yaitu langsung ke remove_meta_boxfungsi. Terima kasih atas sarannya.
Adam
@userabuser: Terima kasih atas klarifikasi, tetapi $post_typesudah ditentukan dan siap digunakan oleh add_meta_boxesfungsi hook tindakan, silakan lihat Adam Brown sorce view hook tindakan ini. Memanfaatkan $post_typedalam hal ini akan membuat kode independen dari post_typelayar pengeditan, yang berarti akan menghapus wpseo_metakotak meta dari semua jenis posting yang ditemukan, dan tidak akan mengembalikan apa pun jika wpseo_metatidak ditemukan.
Ahmad M
@AhmadM Terima kasih sobat. Saya menyadari var sudah didefinisikan, namun itu tidak membuatnya menjadi keharusan untuk masuk ke hook / fungsi. Dalam hal ini OP ingin menghapus kotak meta dari postpost_type yang merupakan alasan mengapa solusi awal memungkinkan kontrol granular. Namun dalam kasus di mana Anda ingin menghapusnya untuk semua jenis posting maka menggunakan var yang sudah ditentukan $post_typememuaskan. Apa yang akan saya lakukan adalah mengedit jawaban saya untuk memasukkan contoh tambahan Anda menggunakan $post_typevariabel untuk situasi di mana seseorang mungkin ingin menerapkan ini ke semua post_types terdaftar.
Adam
5

Coba tempel ini dalam file plugin atau tema functions.php, sesuai dengan plugin WordPress SEO ( API Documents ), oleh Yoast .

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

Untuk menghindari kesalahan ... Ini memeriksa untuk memastikan fungsi tersebut ada, sebelum mencoba menyembunyikan hal-hal, memungkinkan Anda untuk menonaktifkan plugin, dan tidak melempar kesalahan.

Anda mungkin perlu mengaitkannya initagar ini berfungsi dengan benar, yang bisa dilakukan seperti ini:

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');
Michael Ecklund
sumber
4

Anda dapat menghapusnya menggunakan fungsi 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' );
}

Perhatikan 100000 di add_action, ini memastikan bahwa ini dilakukan setelah metabox WP SEO telah terhubung.

Kid Slimmer
sumber
2

Anda dapat menggunakan plugin Adminimize untuk menyembunyikan item dari pengguna tergantung pada peran mereka. Telah menggunakan ini sendiri untuk menyembunyikan beberapa hal SEO Yoast dari klien dan menyederhanakan bagian belakang.

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

Cukup mudah digunakan dengan menambahkan pemilih css untuk item yang ingin Anda sembunyikan. Telah menggunakannya untuk menyembunyikan tab Analisis Halaman SEO (#linkdex)

noelmcg
sumber
0

Yah ada opsi pengaturan pada WordPress SEO oleh Yoast untuk menonaktifkan bagian lanjutan dari pengaturan SEO WordPress untuk non admin. Jika Anda ingin menonaktifkan kotak sepenuhnya maka Anda dapat menggunakan plugin lain untuk menghapus elemen halaman editor posting untuk non admin, misalnya menghapus kotak WordPress SEO dari editor posting untuk non admin.

pengguna36226
sumber