Yetenekler ve Özel Mesaj Türleri


30

Ancak, belirli rollere erişimi sınırlandırmak istediğim özel bir gönderi türüm var, ancak özel gönderi türünü kullanarak zaten içerik ekledim ve şimdi bunları kısıtlandırmam gerekiyor. Capability_type 'yayınlandı'

'capability_type' => 'post'

İçeriğin arka uçta göründüğü kadar sorun ne olursa olsun, içeriğin arka uçtan kaybolacağı herhangi bir yetenek eklediğimde şimdi ne olur?

Yetenek türünü kendim oluşturmak için çoğul tanımları içerecek şekilde özelleştirmeye çalıştım, ancak yetenek türlerini kaldırdığımda veya değiştirdiğimde bitti!

tam kod:

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),

    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,

    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    )
);

register_post_type( 'gallery', $args );
}

Bunu tamamen yeni bir özel yazı tipiyle de test ettim ve yetenek tipinden bağımsız olarak aynı sorunu yaşıyorum; örneğin, kaldırsam ve özel kodumu eklesem bile:

'capability_type' => array('movie','movies');

Yanıtlar:


40

Justin Tadlock'tan faydalı bir kaynak olduğuna dikkat çeken Magicroundabout ile kısa bir sohbetten sonra , örneğin aşağıdaki özel gönderi türü için, role ekle_ap kullanmazsanız, özel gönderi türleri için yeteneklerin gerçekten mevcut olmadığı ortaya çıkar:

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    ),
    // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 
    'map_meta_cap' => true
);

register_post_type( 'gallery', $args );
}

ek yetenekler, 'yönetici' de dahil olmak üzere arka uçta çalışma izninin gerçekten çalışabilmesi için bir role eklenmelidir - örneğin:

function add_theme_caps() {
    // gets the administrator role
    $admins = get_role( 'administrator' );

    $admins->add_cap( 'edit_gallery' ); 
    $admins->add_cap( 'edit_galleries' ); 
    $admins->add_cap( 'edit_other_galleries' ); 
    $admins->add_cap( 'publish_galleries' ); 
    $admins->add_cap( 'read_gallery' ); 
    $admins->add_cap( 'read_private_galleries' ); 
    $admins->add_cap( 'delete_gallery' ); 
}
add_action( 'admin_init', 'add_theme_caps');

Umarım bu başkaları için yararlıdır.


11
add_theme_caps()bir yönetici sayfasının her yüklenişinde değil, yalnızca bir kez çağrılmalıdır. switch_themeTema aktivasyonu için veya register_activation_hookeklenti aktivasyonunda kanca olarak kullanmak daha iyi olacaktır .
d79

Güzel! Tamamen özel / benzersiz bir site ise, yalnızca bir kez yapılması gereken bir işlem olduğundan, yetenekleri eklemek için wp cli'yi kullanmayı seviyorum.
squarecandy

8

Eklemek:

map_meta_cap => true

$ args dizisine. Daha fazlası için buraya bakın . Umarım yardımcı olur!


1
Ben de öyle düşündüm ama durum böyle değil.
erichmond

Bu benim için çalıştı
Shikyo

1

IMHO, kendi yeteneklerinizi asla haritalamazsınız. Bunu yapmak için map meta cap eklentisini kullandığınızdan emin olun. http://codex.wordpress.org/Function_Reference/map_meta_cap

Günlerimi özel başlıklarımı kodla el ile eşlemeye çalışarak geçirdim. Sadece bu eklentiyi kurun, kapaklarınızı eşleştirin ve çalıştıktan sonra devre dışı bırakın. Özel roller oluşturuyorsanız, üye eklentisine ihtiyacınız olacak .

Rolümün bu yeteneklere sahip olduğundan emin olmak için test etme yöntemim (bazen yemin ediyorsun ama aslında yapmıyorsun) aşağıdakiler ile bir hata ayıklama sayfası hazırla:

    if( !function_exists( 'current_user_has_role' ) ){
        function current_user_has_role( $role ){
            $current_user = new WP_User( wp_get_current_user()->ID );
            $user_roles = $current_user->roles;
            $is_or_not = in_array( $role, $user_roles );
            return $is_or_not;
        }
    }

Bu size gerçekte hangi yeteneklere sahip olduğunuzu gösterecektir.


-1

Özel Mesaj Türleri için, ben YAPMAYIN kanca kullanarak öneriyoruz:

add_action( 'registered_post_type', 'your_func', 10, 2 );

bunun yerine kullanmanızı öneririm:

add_filter( 'register_post_type_args', 'your_func', 10, 2 );
function your_func( $args, $name ) 
{
   if ( $name == "your_custom_post_name" ) 
   ...
}

öneri iyi bir seçim, ancak soruyu cevaplamıyor.
Aurovrata
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.