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...
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.
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
}
wp_insert_post()
returns post id. Codex is your friend. Alsoinit
isn't the right hook. seeregister_activation_hook
. – Sisir Commented Apr 13, 2015 at 4:12