web-dev-qa-db-fra.com

Changer le type de capacité du type de message enregistré par le plugin

J'utilise le plugin CSS personnalisé JS qui enregistre son propre type de publication mais la capacité est attribuée à "post".

Je veux le changer en "manage_options".

Existe-t-il un moyen correct sans modifier le plugin pour le faire? Vous appelez un hook, une fonction ou autre?

public function register_post_type() {

    $labels = array (
        'name'               => _x( 'Custom Code', 'post type general name' ),
        'singular_name'      => _x( 'Custom Code', 'post type singular name' ),
        'menu_name'          => _x( 'Custom CSS & JS', 'admin menu' ),
        'name_admin_bar'     => _x( 'Custom Code', 'add new on admin bar' ),
        'add_new'            => _x( 'Add Custom Code', 'add new' ),
        'add_new_item'       => __( 'Add Custom Code' ),
        'new_item'           => __( 'New Custom Code' ),
        'edit_item'          => __( 'Edit Custom Code' ),
        'view_item'          => __( 'View Custom Code' ),
        'all_items'          => __( 'All Custom Code' ),
        'search_items'       => __( 'Search Custom Code' ),
        'parent_item_colon'  => __( 'Parent Custom Code:' ),
        'not_found'          => __( 'No Custom Code found.' ),
        'not_found_in_trash' => __( 'No Custom Code found in Trash.' ),
    );
    $args   = array (
        'labels'              => $labels,
        'description'         => __( 'Custom CSS and JS code' ),
        'public'              => false,
        'publicly_queryable'  => false,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'menu_position'       => 100,
        'menu_icon'           => 'dashicons-plus-alt',
        'query_var'           => false,
        'rewrite'             => array ( 'slug' => 'custom-css-js' ),
        'capability_type'     => 'post', // <--- I want to manipulate this
        'has_archive'         => true,
        'hierarchical'        => false,
        'exclude_from_search' => true,
        'menu_position'       => null,
        'can_export'          => false,
        'supports'            => array ( 'title' ),
    );

    register_post_type( 'custom-css-js', $args );
}

Le code ci-dessus est dans custom-css-js.php lignes 200-239.

5
kybernaut.cz

@PieterGoosen est cool, et reste éveillé comme moi et répond comme un patron.

Pour simplifier son code et le faire fonctionner à ceci spécifiquement sans un tas de bric-à-brac sur votre page:

/**
 * Pieter Goosen writes awesome code
 */
add_filter( 'register_post_type_args', 'change_capabilities_of_the_custom_css_js_posttype' , 10, 2 );

function change_capabilities_of_the_custom_css_js_posttype( $args, $post_type ){

 // Do not filter any other post type
 if ( 'custom-css-js' !== $post_type ) {

     // Give other post_types their original arguments
     return $args;

 }

 // Change the capability_type of the "custom-css-js" post_type
 $args['capability_type'] = 'manage_options';

  // Give the custom-css-js post type it's arguments
  return $args;

}

Le plugin que vous avez choisi est écrit de manière large. Il y a des insécurités.

4
Nathan Powell

WordPress 4.4 a finalement vu l'introduction du filtre register_post_type_args que vous pouvez utiliser pour modifier les arguments utilisés lors de l'enregistrement d'un type de message personnalisé ( ou de type intégré )

Je ne peux rien coder de concret maintenant, mais ce qui suit devrait vous aider

add_filter( 'register_post_type_args', function ( $args, $post_type )
{
    // Only target our specific post type
    if ( 'my_post_type' !== $post_type )
        return $args;

    // OK, we have our specified post type, lets alter our arguments
    ?><pre><?php var_dump( $args ); ?></pre><?php

    // Change capability_type
    $args['capability_type'] = 'some_new_value';

    return $args;
}, 10, 2 );
5
Pieter Goosen