auto create only 1 wp page in activate custom plugin

admin2025-01-08  3

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...

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...

Share Improve this question edited Apr 13, 2015 at 7:50 Pieter Goosen 55.4k23 gold badges115 silver badges209 bronze badges asked Apr 13, 2015 at 3:49 gadssgadss 1511 gold badge5 silver badges10 bronze badges 1
  • 3 wp_insert_post() returns post id. Codex is your friend. Also init isn't the right hook. see register_activation_hook. – Sisir Commented Apr 13, 2015 at 4:12
Add a comment  | 

3 Answers 3

Reset to default 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");

    }

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.

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
        }
    
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1736267466a1198.html

最新回复(0)