Hook a new url and new post type
2018-04-30
It can be done by calling "register_post_type()"
<?php
/**
* Register our Announcement Custom Post Type
* used to easily manage the announcements on the site
*
* @author Code Parrots
*
* @link http://www.codeparrots.com
*
* @package Timeline Express
*
* @since 1.2
*/
// store our options for use here
$timeline_express_options = timeline_express_get_options();
/**
* Wrapped in apply_filters() twice, for legacy support.
* Allow users to alter the timeline express slug.
*
* Legacy Filter: timeline-express-slug @since 1.1.3
* New Filter: timeline_express_slug @since 1.2
*/
$announcement_slug = apply_filters( 'timeline_express_slug', apply_filters( 'timeline-express-slug', __( 'announcement', 'timeline-express' ) ) );
/**
* Allow users to alter the timeline express menu text (singular items)
* @since 1.2
*/
$announcement_singular_text = apply_filters( 'timeline_express_singular_name', esc_html__( 'Announcement', 'timeline-express' ) );
/**
* Allow users to alter the timeline express menu text (plural items)
* @since 1.2
*/
$announcement_plural_text = apply_filters( 'timeline_express_plural_name', esc_html__( 'Announcements', 'timeline-express' ) );
/**
* Custom Post Type Label Array
*/
$timeline_express_labels = array(
/* translators: %s: Announcement singular name eg: Announcement Name */
'name' => sprintf( esc_html( 'Timeline Express %s', 'timeline-express' ), $announcement_plural_text ),
'singular_name' => $announcement_singular_text, /* Menu item at the top New > Announcement */
'menu_name' => esc_html__( 'Timeline Express', 'timeline-express' ), /* Menu name */
'parent_item_colon' => esc_html__( 'Timeline Express:', 'timeline-express' ),
/* translators: %s: Announcement plural name eg: All Announcements */
'all_items' => sprintf( esc_html( 'All %s', 'timeline-express' ), $announcement_plural_text ),
/* translators: %s: Announcement singular name eg: View Announcement */
'view_item' => sprintf( esc_html( 'View %s', 'timeline-express' ), $announcement_singular_text ),
/* translators: %s: Announcement singular name eg: New Announcement */
'add_new_item' => sprintf( esc_html( 'New %s', 'timeline-express' ), $announcement_singular_text ),
/* translators: %s: Announcement singular name eg: New Announcement */
'add_new' => sprintf( esc_html( 'New %s', 'timeline-express' ), $announcement_singular_text ),
/* translators: %s: Announcement singular name eg: Edit Announcement */
'edit_item' => sprintf( esc_html( 'Edit fuck %s', 'timeline-express' ), $announcement_singular_text ),
/* translators: %s: Announcement singular name eg: Update Announcement */
'update_item' => sprintf( esc_html( 'Update %s', 'timeline-express' ), $announcement_singular_text ),
/* translators: %s: Announcement plural name eg: Search Announcements */
'search_items' => sprintf( esc_html( 'Search %s', 'timeline-express' ), $announcement_plural_text ),
/* translators: %s: Announcement plural name eg: Search Announcements */
'not_found' => sprintf( esc_html( 'No Timeline Express %s Found', 'timeline-express' ), $announcement_plural_text ),
/* translators: %s: Announcement plural name eg: Search Announcements */
'not_found_in_trash' => sprintf( esc_html( 'No Timeline Express %s in Trash', 'timeline-express' ), $announcement_plural_text ),
);
/**
* Custom post type rewrite rules
*/
$timeline_express_rewrite = array(
'slug' => $announcement_slug,
'with_front' => false,
'pages' => true,
'feeds' => true,
);
/**
* Custom post type arguments
*/
$timeline_express_args = array(
'label' => 'timeline-express-announcement',
/* translators: %s: Announcement plural name eg: announcements */
'description' => sprintf( esc_html( 'Post type for adding timeline express %s to the site.', 'timeline-express' ), strtolower( $announcement_plural_text ) ),
'labels' => $timeline_express_labels,
'supports' => array( 'title', 'editor' ),
'taxonomies' => array(),
'hierarchical' => true,
'public' => isset( $timeline_express_options['read-more-visibility'] ) ? $timeline_express_options['read-more-visibility'] : true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => isset( $timeline_express_options['read-more-visibility'] ) ? $timeline_express_options['read-more-visibility'] : true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'menu_icon' => TIMELINE_EXPRESS_URL . 'lib/admin/images/timeline-express-menu-icon.png',
'can_export' => true,
'has_archive' => isset( $timeline_express_options['read-more-visibility'] ) ? $timeline_express_options['read-more-visibility'] : true,
'publicly_queryable' => isset( $timeline_express_options['read-more-visibility'] ) ? $timeline_express_options['read-more-visibility'] : true,
'exclude_from_search' => ( isset( $timeline_express_options['announcement-appear-in-searches'] ) && 'true' === $timeline_express_options['announcement-appear-in-searches'] ) ? true : false,
'rewrite' => $timeline_express_rewrite,
'rest_base' => $announcement_slug,
'show_in_rest' => 'WP_REST_Posts_Controller',
'capability_type' => 'page',
);
/**
* Register the announcement post type.
*/
register_post_type( 'te_announcements', $timeline_express_args );
/* Flush the re-write rules/permalinks - prevents 404 on initial plugin activation */
$set = get_option( 'post_type_rules_flushed_te-announcements', false );
/**
* If the re-write rules are not set, flush them and update the option
* Prevents re-write rules being flushed every page load
*
* @since 1.2.8.5
*
* @link https://github.com/EvanHerman/timeline-express/pull/24
*/
if ( ! $set ) {
flush_rewrite_rules( false );
update_option( 'post_type_rules_flushed_te-announcements', true );
}