WordPress SEO by Yoast: Ukryj meta-skrzynki w postach dla nie-administratorów


Odpowiedzi:


19

W dokumentach API na stronie wtyczki Yoast SEO nie IDbyło napisane, co to było i nie mam do dyspozycji kopii Yoast, ale zgodnie z yoas-plugin-dir/admin/class-metabox.phplinią 144 zarejestrowano meta_box;

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

Który jest zaczepiony na add_meta_boxeshaku na linii 32 tego samego pliku,

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

Oczywiście możesz pobrać identyfikator z samej skrzynki meta na ekranie edycji postów ... W każdym razie.

Możesz wykonać następujące czynności,

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

... gdzie typ postu to typ postu, w którym chcesz zastosować to ograniczenie, np. postniestandardowy typ postu jeden lub więcej!

Powinien załatwić sprawę.

aktualizacja: manage_pluginspowinna być activate_plugins- poprawiona.


16
+1 dla yoast_is_toast().
kaiser

@Ahmad M dzięki za sugerowaną edycję, ale $post_typeparametr argumentu var i action nie jest wymagany w tym przypadku i nie powoduje powiadomienia / błędu. Również jeśli $post_typedołączasz var, musisz zdefiniować typ postu w funkcji w innym miejscu, czego nie zrobiłeś, więc użytkownik uruchomiłby to, aby działał nieprawidłowo! W tym przypadku całkowicie dopuszczalne jest podanie nazwy typu posta, tj. 'post'Bezpośrednio do remove_meta_boxfunkcji. W każdym razie dziękuję za sugestie.
Adam

@ userabuser: Dziękujemy za wyjaśnienie, ale $post_typejest już zdefiniowane i gotowe do użycia przez add_meta_boxesfunkcje haka akcji, zobacz widok Adama Browna na ten hak akcji. Wykorzystanie $post_typew tym przypadku uniezależni kod od post_typeekranu edycji, co oznacza, że ​​usunie wpseo_metameta-box ze wszystkich typów postów, na których się znajduje, i nie zwróci niczego, jeśli wpseo_metanie zostanie znaleziony.
Ahmad M,

@AhmadM Dzięki kolego. Zdaję sobie sprawę z tego, że var jest już zdefiniowany, ale nie oznacza to, że konieczne jest przejście do hook / funkcji. W tym przypadku OP chce usunąć meta-box z typu postpost_ dlatego właśnie początkowe rozwiązanie pozwoli na szczegółową kontrolę. Jednak w przypadku, gdy chcesz go usunąć dla wszystkich typów postów, użycie już zdefiniowanego var $post_typejest zadowalające. To, co zrobię, to edytuj moją odpowiedź, aby uwzględnić dodatkowy przykład, używając $post_typezmiennej dla sytuacji, w których ktoś może chcieć zastosować to do wszystkich zarejestrowanych typów post_typ.
Adam,

5

Spróbuj wkleić to do wtyczki lub functions.phppliku motywu , zgodnie z wtyczką SEO WordPress ( Dokumenty API ), autorstwa Yoast .

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

Aby uniknąć błędów ... Sprawdza to, czy funkcja istnieje, przed próbą ukrycia rzeczy, umożliwiając dezaktywację wtyczki i nieprzerzucanie błędów.

Może być konieczne podłączenie się, initaby to działało poprawnie, co można zrobić w następujący sposób:

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

Możesz go usunąć za pomocą funkcji 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' );
}

Zwróć uwagę na 100000 w dodatkowej aktywności, to gwarantuje, że zostanie to zrobione po podłączeniu metaboksu WP SEO.


2

Możesz użyć wtyczki Adminimize, aby ukryć elementy przed użytkownikami w zależności od ich ról. Użyłem tego osobiście, aby ukryć niektóre elementy SEO Yoast przed klientami i uprościć zaplecze.

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

Prosty w użyciu, dodając selektory css dla elementów, które chcesz ukryć. Użyłem go do ukrycia kart analizy stron SEO (#linkdex)


0

Cóż, istnieje opcja ustawienia w WordPress SEO przez Yoast do wyłączania zaawansowanej części ustawień SEO WordPress dla nie-administratorów. Jeśli chcesz całkowicie wyłączyć to pole, możesz użyć innych wtyczek, aby usunąć elementy strony edytora postów dla osób niebędących administratorami, np. Usunięcie skrzynki SEO WordPress z edytora postów dla osób niebędących administratorami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.