WordPress SEO by Yoast: Ascunde Meta Box-urile din Articole pentru Non-administratori
Am un site cu mai mulți autori și nu sunt prea confortabil să permit tuturor membrilor să completeze detaliile SEO în articolele pe care le publică. Aș dori ca acestea să fie vizibile doar Administratorului site-ului. Aveți idei?
Nu era specificat în documentația API de pe site-ul pluginului Yoast SEO care este ID
-ul și nu am o copie a Yoast instalată la dispoziție, dar conform yoas-plugin-dir/admin/class-metabox.php
linia 144, meta_box-ul înregistrat este;
add_meta_box( 'wpseo_meta', ...etc ); ...
Care este conectat la hook-ul add_meta_boxes
pe linia 32 din același fișier,
add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
Desigur, ai putea obține ID-ul direct din meta box de pe ecranul de editare al articolului... Oricum.
Poți face următoarele,
add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
//capabilitatea 'manage_plugins' este egală cu administrator, deci dacă NU este administrator
//ascunde meta box-ul pentru toate celelalte roluri pe următorul 'post_type'
//cum ar fi post, page, custom_post_type, etc
if (!current_user_can('activate_plugins')) {
remove_meta_box('wpseo_meta', 'post_type', 'normal');
}
}
...unde post type este tipul de postare pe care dorești să aplici această restricție, cum ar fi post
sau un tip personalizat de postare unul sau mai multe!
Ar trebui să funcționeze.
actualizare: manage_plugins
ar fi trebuit să fie activate_plugins
- corectat.

@Ahmad M mulțumesc pentru sugestia de editare, dar variabila $post_type
și parametrul acțiunii nu sunt necesare în acest caz și nu generează notificare/eroare. De asemenea, dacă includeți variabila $post_type
, trebuie să definiți tipul de postare în altă parte a funcției, ceea ce nu ați făcut, așa că utilizatorul ar fi rulat acest cod pentru a-l face să funcționeze incorect! În acest caz, este perfect acceptabil să transmiteți numele tipului de postare direct în funcția remove_meta_box
, de exemplu ca 'post'
. Oricum, mulțumesc pentru sugestie.

@userabuser: Mulțumesc pentru clarificare, dar $post_type
este deja definit și gata de utilizare de către funcțiile hook-ului de acțiune add_meta_boxes
, vă rugăm să consultați vizualizarea sursă Adam Brown a acestui hook de acțiune. Utilizarea $post_type
în acest caz va face codul independent de ecranul de editare al post_type
, ceea ce înseamnă că va elimina cutia meta wpseo_meta
din toate tipurile de postări pe care se găsește și nu va returna nimic în cazul în care wpseo_meta
nu este găsit.

@AhmadM Mulțumesc, amice. Sunt conștient de faptul că variabila este deja definită, totuși asta nu o face obligatorie pentru a fi transmisă în hook/funcție. În acest caz, OP dorește să elimine meta box-ul din post_type-ul post
, motiv pentru care soluția inițială va permite un control granular. Cu toate acestea, în cazul în care doriți să îl eliminați pentru toate post_type-urile, atunci utilizarea variabilei deja definite $post_type
este suficientă. Ceea ce voi face, este să editez răspunsul meu pentru a include exemplul tău suplimentar folosind variabila $post_type
pentru situațiile în care cineva ar putea dori să aplice acest lucru pentru toate post_type-urile înregistrate.

Încearcă să adaugi acest cod în fișierul functions.php
al unui plugin sau al temei, conform WordPress SEO plugin (Documentația API), dezvoltat de Yoast.
if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
add_filter('wpseo_use_page_analysis', '__return_false');
}
Pentru a evita orice eroare... Acest cod verifică dacă funcția există înainte de a încerca să ascundă anumite elemente, permițându-ți să dezactivezi pluginul fără a genera erori.
Este posibil să fie necesar să folosești hook-ul init
pentru ca acest cod să funcționeze corect, așa cum este arătat mai jos:
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');

Îl puteți elimina folosind funcția 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' );
}
Observați valoarea 100000 în add_action, aceasta asigură că această acțiune este executată după ce caseta meta WP SEO a fost înregistrată.

Puteți utiliza plugin-ul Adminimize pentru a ascunde elemente de la utilizatori în funcție de rolurile acestora. Am folosit acest plugin personal pentru a ascunde unele elemente Yoast SEO de la clienți și a simplifica interfața din spate.
http://wordpress.org/extend/plugins/adminimize/
Destul de simplu de utilizat prin adăugarea selectorilor CSS pentru elementele pe care doriți să le ascundeți. L-am folosit pentru a ascunde filele de Analiză SEO a Paginii (#linkdex)

Există o opțiune de setare în WordPress SEO by Yoast pentru a dezactiva partea avansată a setărilor WordPress SEO pentru utilizatorii care nu sunt administratori. Dacă doriți să dezactivați complet caseta, puteți utiliza alte plugin-uri pentru a elimina elementele din pagina editorului de articole pentru utilizatorii non-administratori, de exemplu, eliminarea casetei WordPress SEO din editorul de articole pentru utilizatorii non-administratori.
