Inventory_Presser_Allow_Inventory_As_Home_Page
Contents
Description Description
Creates a special page that allows users to see "Inventory" in the list of possible home pages in Settings > Reading.
Source Source
File: includes/class-allow-inventory-as-home-page.php
class Inventory_Presser_Allow_Inventory_As_Home_Page { const PAGE_META_KEY = '_inventory_presser_hidden_page'; /** * create_page * * Creates a page so something shows up in the setting dropdown * * @return void */ private static function create_page() { // Does the page already exist? if ( -1 != self::find_page_id() ) { // Yes, abort return; } $id = wp_insert_post( array( 'comment_status' => 'closed', 'meta_input' => array( self::PAGE_META_KEY => '1', ), 'post_content' => __( 'This is not the real Inventory page. This page exists so that you can set the site\'s home page to the Inventory list in the Customizer or the Settings > Reading admin page. The Inventory "page" is actually a custom post type archive, and typically will not show up in those settings drop downs. All requests for this page will be redirected to the Inventory archive.', 'inventory-presser' ), 'post_status' => 'publish', 'post_title' => __( 'Inventory', 'inventory-presser' ), 'post_type' => 'page', ) ); } /** * create_pages * * Are we on multi-site? If so, we need to create a page on every blog * in the multisite network * * @return void */ static function create_pages() { if ( ! is_multisite() ) { self::create_page(); return; } // We are on multisite, create a page for every site on the network $sites = get_sites( array( 'network' => 1, 'limit' => 1000, ) ); foreach ( $sites as $site ) { switch_to_blog( $site->blog_id ); self::create_page(); restore_current_blog(); } } /** * delete_pages * * Are we on multi-site? If so, we need to delete the page from every * blog in the multisite network * * @return void */ public static function delete_pages() { if ( ! is_multisite() ) { wp_delete_post( self::find_page_id(), true ); return; } // We are on multisite, create a page for every site on the network $sites = get_sites( array( 'network' => 1, 'limit' => 1000, ) ); foreach ( $sites as $site ) { switch_to_blog( $site->blog_id ); wp_delete_post( self::find_page_id(), true ); restore_current_blog(); } } /** * find_page_id * * Finds the ID of the page this plugin creates to allow the user to pick * the inventory listing as a home page option. * * @return int The ID of the page or -1 if the page is not found. */ static function find_page_id() { $pages = get_pages( array( 'meta_key' => self::PAGE_META_KEY, 'meta_value' => '1', ) ); if ( empty( $pages ) ) { return -1; } return $pages[0]->ID; } /** * hide_page_from_edit_list * * Prevents the page this plugin creates from showing up in the list of * pages while editing in the dashboard. We need a page to exist in order to * allow users to choose it as their home page, but we don't want them to * see an actual page in the list, because the Inventory listing is not a * page, it's a custom post type archive. * * @param WP_Query $query An instance of the WP_Query class * @return void */ function hide_page_from_edit_list( $query ) { global $pagenow, $post_type; if ( is_admin() && 'edit.php' == $pagenow && 'page' == $post_type ) { $query->query_vars['post__not_in'] = array( self::find_page_id() ); } } /** * hooks * * Adds hooks * * @return void */ function hooks() { register_activation_hook( INVP_PLUGIN_FILE_PATH, array( 'Inventory_Presser_Allow_Inventory_As_Home_Page', 'create_pages' ) ); add_filter( 'parse_query', array( $this, 'hide_page_from_edit_list' ) ); add_action( 'pre_get_posts', array( $this, 'redirect_the_page' ) ); } /** * redirect_the_page * * Performs the redirect from our special page to the inventory archive * * @param WP_Query $wp_query * @return void */ function redirect_the_page( $wp_query ) { if ( is_admin() ) { return; } if ( $wp_query->get( 'page_id' ) == get_option( 'page_on_front' ) && $wp_query->get( 'page_id' ) == self::find_page_id() ) { wp_redirect( get_post_type_archive_link( INVP::POST_TYPE ) ); exit; } } }
Expand full source code Collapse full source code View on Github
Methods Methods
- create_page — create_page
- create_pages — create_pages
- delete_pages — delete_pages
- find_page_id — find_page_id
- hide_page_from_edit_list — hide_page_from_edit_list
- hooks — hooks
- redirect_the_page — redirect_the_page