0

I am using this code to auto create a page when I activate my plugin..

function insert_page(){
    // Create post object
    $my_post = array(
      'post_title'    => 'My post',
      'post_content'  => 'This is my post.',
      'post_status'   => 'publish',
      'post_author'   => get_current_user_id(),
      'post_type'     => 'page',
    );

    // Insert the post into the database
    wp_insert_post( $my_post, '' );
}
add_action('init', 'insert_page');

The issue now is whenever it loads the admin page it creates also a new page.. is there any way that it only auto create 1 page? when the plugin activate only it then create only 1 page?

also I have on my mind that when it created at wp_insert_post( $my_post, '' ) how can I get the post/page ID? so that I an determine if the page were already exist or not...

0
    register_activation_hook( __FILE__ , 'my_plugin_install');
    function my_plugin_install() {
        global $wpdb;

        $the_page_title = 'Book';
        $the_page_name = 'book';

        // the menu entry...
        delete_option("my_plugin_page_title");
        add_option("my_plugin_page_title", $the_page_title, '', 'yes');
        // the slug...
        delete_option("my_plugin_page_name");
        add_option("my_plugin_page_name", $the_page_name, '', 'yes');
        // the id...
        delete_option("my_plugin_page_id");
        add_option("my_plugin_page_id", '0', '', 'yes');

        $the_page = get_page_by_title( $the_page_title );

        if ( ! $the_page ) {

            // Create post object
            $_p = array();
            $_p['post_title'] = $the_page_title;
            $_p['post_content'] = "[book]";
            $_p['post_status'] = 'publish';
            $_p['post_type'] = 'page';
            $_p['comment_status'] = 'closed';
            $_p['ping_status'] = 'closed';
            $_p['post_category'] = array(1); // the default 'Uncatrgorised'

            // Insert the post into the database
            $the_page_id = wp_insert_post( $_p );

        }
        else {
            // the plugin may have been previously active and the page may just be trashed...

            $the_page_id = $the_page->ID;

            //make sure the page is not trashed...
            $the_page->post_status = 'publish';
            $the_page_id = wp_update_post( $the_page );

        }

        delete_option( 'my_plugin_page_id' );
        add_option( 'my_plugin_page_id', $the_page_id );

    }

    /* Runs on plugin deactivation */
    register_deactivation_hook( __FILE__, 'my_plugin_remove') ;
    function my_plugin_remove() {

        global $wpdb;

        $the_page_title = get_option( "my_plugin_page_title" );
        $the_page_name = get_option( "my_plugin_page_name" );

        //  the id of our page...
        $the_page_id = get_option( 'my_plugin_page_id' );
        if( $the_page_id ) {

            wp_delete_post( $the_page_id ); // this will trash, not delete

        }

        delete_option("my_plugin_page_title");
        delete_option("my_plugin_page_name");
        delete_option("my_plugin_page_id");

    }
0

I am done this thing with the help of

PageTemplater class

Here is my code which i have used in my plugin to automatically generate page and assign template on plugin activation

class PageTemplater {

        /**
         * A Unique Identifier
         */
         protected $plugin_slug;

        /**
         * A reference to an instance of this class.
         */
        private static $instance;

        /**
         * The array of templates that this plugin tracks.
         */
        protected $templates;


        /**
         * Returns an instance of this class. 
         */
        public static function get_instance() {

                if( null == self::$instance ) {
                        self::$instance = new PageTemplater();
                } 

                return self::$instance;

        } 

        /**
         * Initializes the plugin by setting filters and administration functions.
         */
        private function __construct() {

                $this->templates = array();


                // Add a filter to the attributes metabox to inject template into the cache.
                add_filter(
                    'page_attributes_dropdown_pages_args',
                     array( $this, 'register_project_templates' ) 
                );


                // Add a filter to the save post to inject out template into the page cache
                add_filter(
                    'wp_insert_post_data', 
                    array( $this, 'register_project_templates' ) 
                );


                // Add a filter to the template include to determine if the page has our 
                // template assigned and return it's path
                add_filter(
                    'template_include', 
                    array( $this, 'view_project_template') 
                );


                // Add your templates to this array.
                $this->templates = array(
                        'shop-template.php'     => 'Shop Page',
                        'item_details-template.php'     => 'Item Details Page',
                        'review-order-template.php'     => 'Review Page',
                        'delivary-method-template.php'     => 'Delivary Method Page',
                        'print-order-template.php'     => 'Print Order Page',
                        'print-template.php'     => 'Print Page',
                        'pdf-print-template.php'     => 'Pdf Print Page',
                        'login-registration-template.php'     => 'Login Registration Page',
                        'user_dashborad-template.php'     => 'Dashboard Page',
                );  
        } 
        /**
         * Adds our template to the pages cache in order to trick WordPress
         * into thinking the template file exists where it doens't really exist.
         *
         */

        public function register_project_templates( $atts ) {

                // Create the key used for the themes cache
                $cache_key = 'page_templates-' . md5( get_theme_root() . '/' . get_stylesheet() );

                // Retrieve the cache list. 
                // If it doesn't exist, or it's empty prepare an array
                $templates = wp_get_theme()->get_page_templates();
                if ( empty( $templates ) ) {
                        $templates = array();
                } 

                // New cache, therefore remove the old one
                wp_cache_delete( $cache_key , 'themes');

                // Now add our template to the list of templates by merging our templates
                // with the existing templates array from the cache.
                $templates = array_merge( $templates, $this->templates );

                // Add the modified cache to allow WordPress to pick it up for listing
                // available templates
                wp_cache_add( $cache_key, $templates, 'themes', 1800 );
                return $atts;
        } 
        /**
         * Checks if the template is assigned to the page
         */
        public function view_project_template( $template ) {
                global $post;
                if (!isset($this->templates[get_post_meta( 
                    $post->ID, '_wp_page_template', true 
                )] ) ) {
                        return $template;   
                } 
                $file = plugin_dir_path(__FILE__). get_post_meta( 
                    $post->ID, '_wp_page_template', true 
                );
                // Just to be safe, we check if the file exist first
                if( file_exists( $file ) ) {
                        return $file;
                } 
                else { echo $file; }
                return $template;
        } 
} 
add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );

register_activation_hook( __FILE__, 'my_plugin_install_function');
function my_plugin_install_function()
{
    $item_details_page = get_option('item_details_page'); 
    if(!$item_details_page){
        //post status and options
        $post = array(
              'comment_status' => 'closed',
              'ping_status' =>  'closed' ,
              'post_author' => 1,
              'post_date' => date('Y-m-d H:i:s'),
              'post_name' => 'Tell About Your Items',
              'post_status' => 'publish' ,
              'post_title' => 'Tell About Your Items',
              'post_type' => 'page',
        );  
        //insert page and save the id
        $newvalue = wp_insert_post( $post, false );
        if ( $newvalue && ! is_wp_error( $newvalue ) ){
            update_post_meta( $newvalue, '_wp_page_template', 'item_details-template.php' );
        }
        //save the id in the database
        update_option( 'item_details_page', $newvalue );
    }
}

Hope this will help you.

0

These code is working fine with new WordPress.

  • Create a folder in the plugin. Ex: myplugin also create the same filename mypluign.php
  • Add this code in the file after activating this plugin the page will auto crated.

    register_activation_hook( __FILE__, 'myplugin_activate' );
        function myplugin_activate() {
       //create a variable to specify the details of page
    
           $post = array(     
                     'post_content'   => 'content', //content of page
                     'post_title'     =>'Choose-plan', //title of page
                     'post_status'    =>  'publish' , //status of page - publish or draft
                     'post_type'      =>  'page'  // type of post
    );
           wp_insert_post( $post ); // creates page
        }
    

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.