简体   繁体   English

在插件激活(Wordpress)上添加html / PHP页面

[英]Add html/PHP pages on plugin activation (Wordpress)

Well am creating my first wordpress plugin, which should create a page (relatively large) on activation. 好吧,我正在创建我的第一个wordpress插件,该插件应在激活时创建一个页面(相对较大)。

Currently i can create a file using : 目前,我可以使用创建文件:

$_p['post_title'] = $the_page_title;
        $_p['post_content'] = '<h1>PAGE CONTENT</h1>';
        $_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 );

The problem is, I cant put all the content of the file(which is large) as string to 'post_content' index. 问题是,我不能将文件的所有内容(大)作为字符串放入“ post_content”索引中。 I want to know if there is a way, where i can simply either: 我想知道是否有办法,我可以在其中任意一个:

  1. 'post_content' => link to the file in my plugin directory 'post_content'=>链接到我的插件目录中的文件
  2. 'post_content' => call a function which will return html content as string :( [worst case] 'post_content'=>调用一个函数,该函数将以字符串形式返回html内容:( [最坏的情况]
  3. OR, Some more simpler way to achieve the objective. 或者,一些更简单的方法可以实现目标。

Please help me. 请帮我。

Create Page On Plugin activation with content 使用内容创建插件页面激活

$page_content= 'Content of page';
$demo_page = array(
      'comment_status' => 'closed',
      'ping_status' =>  'closed' ,
      'post_author' => 1,
      'post_content' => $page_content,
      'post_date' => date('Y-m-d H:i:s'),
      'post_name' => 'page_name',//display on address bar
      'post_status' => 'publish' ,
      'post_title' => 'Page Display Name',
      'post_type' => 'page',
);  
//insert page and save the id
$demo_page_value = wp_insert_post( $demo_page, false );
//save the id in the database
update_option( 'testpage', $$demo_page_value );

您使用并引导并阅读此链接如何创建插件和页面https://codex.wordpress.org/Creating_Options_Pages

Well, what i did to solve the problem is: 好吧,我为解决该问题所做的是:

//**SECTION : 1** 
   function user_login_foo() {

    return get_login_form(); // get_login_form() function will return the html template i want to display.
}
add_shortcode('user_login', 'user_login_foo'); // created a shortcode


**// SECTION: 2**
function get_login_form()
    {
        ob_start(); ?>
        <h3><?php __('Login'); ?></h3> 
        <form action="" method="post">
            <fieldset>
                 // the login form comes here
            </fieldset>
        </form>
    <?php
    return ob_get_clean();
    }

    function validate_login_user() {
             // the login validation logic comes here
    }
    add_action('init', 'validate_login_user');

SECTION 1: registered a shortcode that will call a function [say,foo1()] and return the value. 第1节:注册了一个短代码,该短代码将调用一个函数[say,foo1()]并返回该值。 The function foo1() calls another a function [say foo2()] which returns a clean html form in response to the call (when the shortcode is called). 函数foo1()调用另一个函数[say foo2()],该函数返回干净的html形式以响应该调用(调用短代码时)。

SECTION 2: In this section I defined the function foo2(), within which the html form [login form] is defined and returned to foo1() [where it is displayed]. 第2节:在本节中,我定义了函数foo2(),在其中定义了html格式[login form]并返回到foo1()[显示它的位置]。 Then i created an action [ add_action('init', 'validate_login_user'); 然后,我创建了一个动作[add_action('init','validate_login_user'); ] which will call the function validate_login_user() on initialization, inside this function i checked for isset(METHOD[username]) and isset(METHOD[password]) and then do respective logic. ],它将在初始化时调用函数validate_login_user(),在该函数内部,我检查了isset(METHOD [username])和isset(METHOD [password]),然后执行各自的逻辑。

Like this i created multiple [shortcodes] for each of the pages I wanted to create at the time of activation, Then : 像这样,我在激活时要为每个要创建的页面创建多个[简码],然后:

 **step 1:** register_activation_hook(__FILE__,'activation_plugin'); 
 **step 2:** activation_plugin(){
     '390' => [ // '390' is page id
           'post_title' => 'Page title say login',
           'post_content' => "[user_login]",
           'post_status' => 'publish',
           'post_type' => 'page',
           'comment_status' => 'closed',
           'ping_status' => 'closed',
           'post_category' => array(1)
        ],
        '391' => [
           'post_title' => 'page title 2',
           'post_content' => "[short_code2]",
           'post_status' => 'publish',
           'post_type' => 'page',
           'comment_status' => 'closed',
           'ping_status' => 'closed',
           'post_category' => array(1)
        ],
         // like this add multiple shortcodes 
   }
      // this foreach will create all the pages
      foreach ($_ as $key => $value) {
        $the_page_title = $value['post_title'];
        $the_page_name = $value['post_title'];

        // the menu entry...
        delete_option($value['post_title']);
        add_option($value['post_title'], $the_page_title, '', 'yes');
        // the slug...
        delete_option($value['post_title']);
        add_option($value['post_title'], $the_page_name, '', 'yes');
        // the id...
        delete_option($key);
        add_option($key, '0', '', 'yes');

        $the_page = get_page_by_title( $the_page_title );

        if ( ! $the_page ) {
            $the_page_id = wp_insert_post( $value );
        }
        else {
            $the_page_id = $the_page->ID;
            $the_page->post_status = 'publish';
            $the_page_id = wp_update_post( $the_page );
        }

        delete_option( $key );
        add_option( $key, $the_page_id );
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM