A plugin must contain a bit of meta information which tells WordPress what it is and how to handle it within your website.
A standard header is introduced below to establish your plugin’s presence.
<?php /** * Plugin Name: My Plugin Name * Plugin URI: http://mypluginuri.com/ * Description: A brief description about your plugin. * Version: 1.0 or whatever version of the plugin (pretty self explanatory) * Author: Plugin Author's Name * Author URI: Author's website * License: A "Slug" license name e.g. GPL12 */
1 Create folder under plugins folder wp-content\plugins\myplugins folder name myplugins and create index.php file
2. Add the code below
<?php /** * Plugin Name: Custom Music Reviews * Plugin URI: https://tutorial101.blogspot.com/ * Description: A custom music review plugin built for example. * Version: 1.0 * Author: Cairocoders * Author URI: http://tutorial101.blogspot.com/ **/ // Register the Custom Music Review Post Type function register_cpt_music_review() { $labels = array( 'name' => _x( 'Music Reviews', 'music_review' ), //post type is called music_review url https://codex.wordpress.org/Post_Types 'singular_name' => _x( 'Music Review', 'music_review' ), 'add_new' => _x( 'Add New', 'music_review' ), //and new link wp-admin/post-new.php?post_type=music_review 'add_new_item' => _x( 'Add New Music Review', 'music_review' ), 'edit_item' => _x( 'Edit Music Review', 'music_review' ), 'new_item' => _x( 'New Music Review', 'music_review' ), 'view_item' => _x( 'View Music Review', 'music_review' ), 'search_items' => _x( 'Search Music Reviews', 'music_review' ), 'not_found' => _x( 'No music reviews found', 'music_review' ), 'not_found_in_trash' => _x( 'No music reviews found in Trash', 'music_review' ), 'parent_item_colon' => _x( 'Parent Music Review:', 'music_review' ), 'menu_name' => _x( 'Music Reviews', 'music_review' ), //left side menu edit.php?post_type=music_review ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Music reviews filterable by genre', 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ), 'taxonomies' => array( 'genres' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'menu_icon' => 'dashicons-format-audio', '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' ); register_post_type( 'music_review', $args ); } add_action( 'init', 'register_cpt_music_review' ); //custom taxonomies to extend themes or plugins //Register a new Taxonomy using register_taxonomy() function genres_taxonomy() { //taxonomy is a way to group things together. register_taxonomy( //https://codex.wordpress.org/Taxonomies 'genres', //new taxonomy called genres 'music_review', //and assigns it to our post type music_review array( 'hierarchical' => true, 'label' => 'Genres', //edit-tags.php?taxonomy=genres&post_type=music_review 'query_var' => true, 'rewrite' => array( 'slug' => 'genre', 'with_front' => false ) ) ); } add_action( 'init', 'genres_taxonomy'); // Function used to automatically create Music Reviews page. function create_music_review_pages() { //post status and options $post = array( 'comment_status' => 'open', 'ping_status' => 'closed' , 'post_date' => date('Y-m-d H:i:s'), 'post_name' => 'music_review', 'post_status' => 'publish' , 'post_title' => 'Music Reviews', 'post_type' => 'page', ); //insert page and save the id $newvalue = wp_insert_post( $post, false ); //save the id in the database update_option( 'mrpage', $newvalue ); } // Activates function if plugin is activated register_activation_hook( __FILE__, 'create_music_review_pages'); //Testing //first create a new page called "Music Reviews" http://localhost/wordpress/music_review/ //Lets create an example music review and see what outputs.