web-dev-qa-db-ja.com

プラグインによって登録された投稿タイプの機能タイプを変更する

私は自分自身の投稿タイプを登録するプラグイン カスタムCSS JS を使用していますが、機能は"post"に割り当てられています。

それを"manage_options"に変更したいです。

それを行うためにプラグインを変更せずに正しい方法はありますか?フック、関数、その他何でもいいですか?

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

上記のコードはcustom-css-js.php200-239にあります。

5
kybernaut.cz

@PieterGoosenはかっこいいですが、それでも私のように目を覚まし、上司のように答えるのです。

彼のコードを単純化し、あなたのページにたくさんのがらくたを付けずにこれをうまく機能させるには:

/**
 * 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;

}

あなたが選んだプラグインは広い意味で書かれています。それはいくつかの不安を持っています。

4
Nathan Powell

WordPress 4.4がついに register_post_type_argsフィルタ の導入を見ました。 カスタム投稿タイプ( またはビルトインタイプ )が登録されたときに使用される引数を変更するために使用できます

今は具体的なコードを書くことはできませんが、次のようにすればうまくいくはずです。

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