在激活定制插件中自动创建仅1个wp页面

时间:2015-04-13 作者:gadss

我正在使用此代码在激活插件时自动创建页面。。

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\');
现在的问题是,无论何时加载管理页面,它都会创建一个新页面。。有没有办法只自动创建一个页面?当插件只激活它,然后只创建1页?

我还想,当它在wp_insert_post( $my_post, \'\' ) 如何获取帖子/页面ID?这样我就可以确定页面是否已经存在。。。

3 个回复
SO网友:amit gangrade
    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");

    }
SO网友:Ratnesh Choudhary

我是在

PageTemplater类

这是我在插件中使用的代码,用于在插件激活时自动生成页面和分配模板

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 );
    }
}
希望这对你有帮助。

SO网友:Gurpreet Singh

这些代码在新的WordPress上运行良好。

在插件中创建文件夹。例如:myplugin还创建相同的文件名myplugin。php在文件中添加此代码激活此插件后,页面将自动装箱。

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
    }

结束

相关推荐

Execute php in pages

我需要在wordpress中执行我的个人php代码来打印mysql数据库中的数据。我只能在页面上执行。我的想法是创建一个文件页pagename。php,复制页面主体。php模板并更改此代码:<?php while ( have_posts() ): the_post(); ?> <article <?php post_class(\'group\'); ?>> <?php get_temp