Snippets

Joseph Dickson Custom Post Type - Newsletter

Created by Joseph Dickson
<?php
/**
 * Plugin Name:   Newsletter
 * Description:   Custom Post Type for a newsletter archive and standing element tiles
 * Author:        Joseph Dickson
 * Author URI:    https://joseph-dickson.com/
 * Version:       0.1
 * License:       GPL2
 */

// Prevent direct access to this file
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

/**
 * Creates a custom post type for a Newsletter
 * A "schedule" icon will apear in dashboard navigation
 * A custom "newsletter" slug permalink is created
 *
 * https://codex.wordpress.org/Function_Reference/register_post_type#Arguments
 */
function pz_custom_post_types() {

    $labels = array(
        'name'			=> 'Newsletter',
        'singular_name'		=> 'Newsletter',
        'menu_name'		=> 'Newsletter',
        'name_admin_bar'	=> 'Newsletter',
        'add_new'		=> 'Add a New Newsletter',
        'add_new_item'		=> 'Add a New Newsletter',
        'new_item'		=> 'New Newsletter',
        'edit_item'		=> 'Edit Newsletter',
        'view_item'		=> 'View Newsletter',
        'all_items'		=> 'All Newsletters',
        'search_items'		=> 'Search Newsletters',
        'parent_item_colon'	=> 'Newsletters :',
        'not_found'		=> 'No newsletters found.',
        'not_found_in_trash'	=> 'No newsletters found in Trash.',
    );

    $args = array(
        'labels'		=> $labels,
        'public'		=> true,
        'publicly_queryable'	=> true,
        'show_ui'		=> true,
        'show_in_menu'		=> true,
        'menu_icon'		=> 'dashicons-schedule',
        'query_var'		=> true,
        'rewrite'		=> array( 'slug' => 'newsletter' ),
        'capability_type'	=> 'post',
        'has_archive'		=> true,
        'hierarchical'		=> false,
	'menu_position'		=> 5,
	'show_in_rest'		=> true,
	'supports'		=> array( 'title', 'editor', 'excerpt', 'thumbnail' ),
    );

    register_post_type( 'newsletter', $args );

/*
 * Adds a Custom Post Type for a "Tile"
 * This will appear as a sub item of Newsletter for optional
 * standing elements to appear within Newsletter posts that
 * can be added to WordPress templates.
 */

    $labels_tile = array(
        'name'			=> 'Tile',
        'singular_name'		=> 'Tile',
        'menu_name'		=> 'Tile',
        'name_admin_bar'	=> 'Tile',
        'add_new'		=> 'Add a New Tile',
        'add_new_item'		=> 'Add a New Tile',
        'new_item'		=> 'New Tile',
        'edit_item'		=> 'Edit Tile',
        'view_item'		=> 'View Tile',
        'all_items'		=> 'All Tiles',
        'search_items'		=> 'Search Tiles',
        'parent_item_colon'	=> 'Tiles :',
        'not_found'		=> 'No tiles found.',
        'not_found_in_trash'	=> 'No tiles found in Trash.',
    );

    $args_tile = array(
        'labels'		=> $labels_tile,
        'public'		=> true,
        'publicly_queryable'	=> false,
        'show_ui'		=> true,
        'show_in_menu'		=> 'edit.php?post_type=newsletter',
        'menu_icon'		=> 'dashicons-schedule',
        'query_var'		=> true,
        'rewrite'		=> array( 'slug' => 'tile' ),
        'capability_type'	=> 'post',
        'has_archive'		=> false,
        'hierarchical'		=> false,
	'menu_position'		=> 5,
	'show_in_rest'		=> true,
	'supports'		=> array( 'title', 'editor', 'thumbnail'  ),
    );

    register_post_type( 'tile', $args_tile );

}

add_action( 'init', 'pz_custom_post_types' );

// Flush rewrite rules to add permalink slug when plugin is activated or reactivated
function my_rewrite_flush() {
    pz_custom_post_types();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'my_rewrite_flush' );

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.