Having trouble creating a page on plugin activation

I’m trying to create a plugin but at the moment I’m having trouble creating a page on activation, please see code below, where am I going wrong? It doesn’t create anything but activates fine.

include('add-acf.php');


if(!class_exists('TW_Contact')) {
    class TW_Contact {


        public function __construct() {         
            add_filter( 'single_template', array($this, 'tw_single_template') );            
            add_shortcode( 'tw_contact', array($this, 'tw_contact_shortcode') );

            $this->bootstrap();

            //echo 'construct';
            //exit;
        }


        /**
         * Setup the environment for the plugin
         */
        public function bootstrap() {

            //echo 'bootstrap';
            //exit;

            register_activation_hook( __FILE__, array( $this, 'activate' ) );
            register_activation_hook( __FILE__, 'my_plugin_install_function');
            add_action( 'init', array( $this, 'register_custom_fields' ) );
            add_action( 'wp_enqueue_scripts', array($this, 'tw_enqueue_scripts') );
        }


        /**
         * Do some stuff upon activation
         */
        public function activate() {
            $this->register_custom_fields();
            $this->tw_enqueue_scripts();

            echo 'before';

            // Flush rewrite rules so that users can access custom post types on the front-end right away
            flush_rewrite_rules();

            echo 'after';
        }

        function my_plugin_install_function() {
            //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' => 'Checklists',
                  'post_status' => 'publish' ,
                  'post_title' => 'Checklists',
                  'post_type' => 'page',
            );  
            wp_insert_post( $post );
        }   

    }
}

Related posts

3 comments

  1. Make sure that page ‘Checklists’ is not already created.
    Try the code.

    include('add-acf.php');
    
    
    if(!class_exists('TW_Contact')) {
        class TW_Contact {
    
    
            public function __construct() {         
                add_filter( 'single_template', array($this, 'tw_single_template') );            
                add_shortcode( 'tw_contact', array($this, 'tw_contact_shortcode') );
    
                $this->bootstrap();
    
                //echo 'construct';
                //exit;
            }
    
    
            /**
             * Setup the environment for the plugin
             */
            public function bootstrap() {
    
                //echo 'bootstrap';
                //exit;
    
                register_activation_hook( __FILE__, array( $this, 'activate' ) );
                register_activation_hook( __FILE__,  array( $this,'my_plugin_install_function');
                add_action( 'init', array( $this, 'register_custom_fields' ) );
                add_action( 'wp_enqueue_scripts', array($this, 'tw_enqueue_scripts') );
            }
    
    
            /**
             * Do some stuff upon activation
             */
            public function activate() {
                $this->register_custom_fields();
                $this->tw_enqueue_scripts();
    
                echo 'before';
    
                // Flush rewrite rules so that users can access custom post types on the front-end right away
                flush_rewrite_rules();
    
                echo 'after';
            }
    
            function my_plugin_install_function() {
                //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' => 'Checklists',
                      'post_status' => 'publish' ,
                      'post_title' => 'Checklists',
                      'post_type' => 'page',
                );  
                wp_insert_post( $post );
            }   
    
        }
    }
    
  2. if(!class_exists('TW_Contact')) {
        class TW_Contact {
    
    
            public function __construct() {         
              //  add_filter( 'single_template', array($this, 'tw_single_template') );            
              //  add_shortcode( 'tw_contact', array($this, 'tw_contact_shortcode') );
    
                $this->bootstrap();
    
                //echo 'construct';
                //exit;
            }
    
    
            /**
             * Setup the environment for the plugin
             */
            public function bootstrap() {
    
                //echo 'bootstrap';
                //exit;
    
              //  register_activation_hook( __FILE__, array( $this, 'activate' ) );
                register_activation_hook( __FILE__, array( $this, 'my_plugin_install_function' ) );
               // add_action( 'init', array( $this, 'register_custom_fields' ) );
              //   add_action( 'wp_enqueue_scripts', array($this, 'tw_enqueue_scripts') );
            }
    
    
            /**
             * Do some stuff upon activation
             */
            public function activate() {
            //    $this->register_custom_fields();
                $this->tw_enqueue_scripts();
    
               // echo 'before';
    
                // Flush rewrite rules so that users can access custom post types on the front-end right away
               // flush_rewrite_rules();
    
               // echo 'after';
            }
    
            function my_plugin_install_function() {
                //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' => 'Checklists',
                      'post_status' => 'publish' ,
                      'post_title' => 'Checklists',
                      'post_type' => 'post',
                );  
                wp_insert_post( $post );
            }   
    
        }
    
       global $obj;
       $obj = new TW_Contact();
    
    }
    

    This code will work .you should initialize object . I had commented some unwanted code .Hope this will work.

  3. It all came down to the way I was calling the function, should be:

            register_activation_hook( MYPLUGIN_FILE, array( $this, 'plugin_activated' ) );
            register_deactivation_hook( MYPLUGIN_FILE, array($this, 'plugin_deactivated' ));
    

Comments are closed.