WordPress SEO by Yoast: Ẩn Meta Box trong bài viết cho người không phải quản trị viên


9

Tôi có trang web đa tác giả và tôi không thoải mái lắm khi cho phép tất cả các thành viên nhập chi tiết SEO vào bài đăng họ đang xuất bản. Tôi muốn điều này chỉ hiển thị với Quản trị viên của trang web. Có ý kiến ​​gì không?

Câu trả lời:


19

Điều đó không nói trong các tài liệu API trên trang web plugin Yoast SEO là gì IDvà tôi không có bản sao Yoast khi cài đặt, nhưng theo yoas-plugin-dir/admin/class-metabox.phpdòng 144, meta_box đã đăng ký là;

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

Được nối vào add_meta_boxeshook trên dòng 32 của cùng một tệp,

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

Tất nhiên, bạn có thể lấy ID từ hộp meta trên màn hình chỉnh sửa bài đăng ... Dù sao đi nữa.

Bạn có thể làm như sau

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

... Trong đó loại bài đăng là loại bài đăng bạn muốn áp dụng hạn chế này, chẳng hạn như posthoặc một loại bài đăng tùy chỉnh một hoặc nhiều!

Nên làm thủ thuật.

cập nhật: manage_pluginsnên đã được activate_plugins- trang bị .


16
+1 cho yoast_is_toast().
kaiser

@Ahmad M cảm ơn bạn đã chỉnh sửa nhưng $post_typetham số đối số var và hành động không bắt buộc trong trường hợp này và không đưa ra thông báo / lỗi. Ngoài ra nếu bạn bao gồm $post_typevar, bạn cần xác định loại bài đăng trong hàm ở nơi khác mà bạn không làm, vì vậy người dùng sẽ chạy nó để nó hoạt động không đúng! Trong trường hợp này, nó hoàn toàn chấp nhận được để chuyển vào tên loại bài đăng tức là 'post'trực tiếp vào remove_meta_boxchức năng. Cảm ơn vì lời đề nghị nào.
Adam

@userabuser: Cảm ơn bạn đã làm rõ, nhưng $post_typeđã được xác định và sẵn sàng để sử dụng bởi các add_meta_boxeschức năng hook hành động, vui lòng xem chế độ xem phù hợp của Adam Brown của hook hành động này. Việc sử dụng $post_typetrong trường hợp này sẽ làm cho mã độc lập với post_typemàn hình chỉnh sửa, nghĩa là nó sẽ xóa wpseo_metahộp meta khỏi tất cả các loại bài đăng được tìm thấy trên đó và sẽ không trả lại bất cứ điều gì trong trường hợp wpseo_metakhông tìm thấy.
Ahmad M

@AhmadM Cảm ơn bạn đời. Tôi biết rằng var đã được xác định, tuy nhiên điều đó không làm cho nó trở thành một điều kiện cần thiết để chuyển vào hook / function. Trong trường hợp này, OP muốn xóa hộp meta khỏi postpost_type, đó là lý do giải pháp ban đầu sẽ cho phép kiểm soát chi tiết. Tuy nhiên trong trường hợp bạn muốn loại bỏ nó cho tất cả các loại bài đăng thì sử dụng var đã được xác định $post_typelà thỏa đáng. Những gì tôi sẽ làm, là chỉnh sửa câu trả lời của tôi để đưa vào ví dụ bổ sung của bạn bằng cách sử dụng $post_typebiến cho các tình huống mà ai đó có thể muốn áp dụng điều này cho tất cả các post_types đã đăng ký.
Adam

5

Hãy thử dán functions.phptệp này trong một plugin hoặc tệp chủ đề , theo plugin WordPress SEO ( API Docs ), bởi Yoast .

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

Để tránh bất kỳ lỗi nào ... Điều này kiểm tra để đảm bảo chức năng tồn tại, trước khi cố gắng ẩn nội dung, cho phép bạn tắt plugin và không ném lỗi.

Bạn có thể cần phải nối vào initđể làm việc này đúng cách, có thể được thực hiện như thế này:

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

Bạn có thể xóa nó bằng hàm 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' );
}

Lưu ý 100000 trong add_action, điều này đảm bảo rằng điều này được thực hiện sau khi metabox WP SEO đã được nối vào.


2

Bạn có thể sử dụng plugin Adminizing để ẩn các mục khỏi người dùng tùy thuộc vào vai trò của họ. Đã sử dụng bản thân mình để ẩn một số nội dung SEO Yoast khỏi khách hàng và đơn giản hóa phần cuối.

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

Khá đơn giản để sử dụng bằng cách thêm các bộ chọn css cho các mục bạn muốn ẩn. Đã sử dụng nó để ẩn các tab Phân tích Trang SEO (#linkdex)


0

Vâng, có một tùy chọn cài đặt trên WordPress SEO bởi Yoast để vô hiệu hóa phần nâng cao của cài đặt SEO WordPress cho người quản trị không. Nếu bạn muốn vô hiệu hóa hoàn toàn hộp thì bạn có thể sử dụng các plugin khác để xóa các thành phần trang của trình chỉnh sửa bài đăng đối với người không phải quản trị viên, ví dụ: xóa hộp WordPress SEO khỏi trình chỉnh sửa bài cho người không phải quản trị viên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.