在`init`处标识包含短码的页面

时间:2013-10-13 作者:Mario.Hydrant

我正在编写一个插件,在何时触发插件代码的特定功能方面遇到了一些困难。

/*
// Plugin information goes here
*/


// ***** Area A

$GLOBALS[\'example_class\'] = new example_class;

class example_class {

    // ***** Area B

    public function admin_init() {
        add_menu_page(

            // ...

        );
    } // End of admin_init function
} // End of example class

add_action(\'init\', function() {
    global $example_class;

    // ***** Area C

    if ( ?????? ) {

        // Sanitize and set the view role
        $view = ( isset( $_REQUEST[\'view\'] ) ) ? sanitize_key( $_REQUEST[\'ex\'] ) : \'get_all\';
        // Manage submitted data
        switch ( $view ) {

            // ...

        } // End of switch for view

        // Sanitize and set the action role
        $action = ( isset( $_REQUEST[\'action\'] ) ) ? sanitize_key( $_REQUEST[\'action\'] ) : NULL;
        // Manage submitted data
        switch ( $action ) {

            //...

        } // End of switch for action

    } // End of if page is being shown
});

add_action( \'admin_menu\', function() {
    global $example_class;
    $example_class->admin_init();
});

add_shortcode( \'show_public_random\', function () {
    global $example_class;
    // ...
});
根据建议in a previous post, 我将插件的控制器端分离为init 事件但是,我不希望init 每次加载页面时都要计算事件函数-我希望仅在加载包含短代码的页面时才计算代码。

我曾尝试加载一个布尔类变量,该变量初始化为false,但在add\\u shortcode函数中被更改为true,但到那时,为时已晚init 事件已激发,函数的内容未运行。

请帮助我-我应该在代码的C区使用哪个表达式?我应该针对什么进行测试以确保init 事件函数仅在使用快捷码时运行?

1 个回复
SO网友:Mario.Hydrant

我找到了一个答案,虽然很混乱。

/*
// Plugin information goes here
*/
$GLOBALS[\'example_class\'] = new example_class;

class example_class {

    var $public_loaded = false,
        $content = \'\';

    public function admin_init() {
        add_menu_page(
            // ...
        );
    } // End of admin_init function

    public function get_random( ) {
        // ...
    }
} // End of example class

add_action(\'init\', function() {
    global $example_class;

    // ***** Area A
    // Check for arbitrary variable sent with every user interaction
    if ( if ( isset( sanitize_key( $_REQUEST[\'tni\'] ) ) ) {

        // ***** Area B
        /* Set the class variable `public_loaded` to true after it\'s
         * clear we\'re loading a public page which uses our plugin */
        $example_class->public_loaded = true;

        // Sanitize and set the action role
        $action = ( isset( $_REQUEST[\'action\'] ) ) ? sanitize_key( $_REQUEST[\'action\'] ) : NULL;
        // Manage submitted data
        switch ( $action ) {
            // ...
        } // End of switch for action

        // Sanitize and set the view role
        $view = ( isset( $_REQUEST[\'view\'] ) ) ? sanitize_key( $_REQUEST[\'ex\'] ) : \'get_all\';
        // Manage submitted data
        switch ( $view ) {
            // ... Generate content and store in $this->content
        } // End of switch for view
    } // End of if page is being shown
});

add_action( \'admin_menu\', function() {
    global $example_class;
    $example_class->admin_init();
});

add_shortcode( \'show_public_random\', function () {
    global $example_class;
    // ***** Area C
    /* Check to see if page has loaded using the telltale sign
     * If not, load a default view - a random post */
    if ( $example_class->public_loaded === false ) {
        $example_class->content = $example_class->get_random();
        // ...
    }

    // Return the generated content
    return $example_class->content;
});
在区域A中,我设置了一个限定语句,以查看用户是否提交了一个变量以及他们与我的插件的交互。如果插件是我的,则对代码进行评估,并且actionview 评估模式。此外,该函数还将设置类变量public_loaded 为真。

在区域C中,我设置了一个限定语句,以查看类变量是否已设置为true;如果不是,则为快捷代码设置默认视图。

结束

相关推荐

Custom field within shortcode

我目前正在使用“WP Simple Paypal Shopping Cart”插件建立一个简单的Paypal电子商务网站,它非常容易使用,但为了节省客户编写短代码的时间,我在后端设置了自定义字段以输入产品名称和价格TheAdd to Cart 按钮是使用一段简单的短代码生成的,如下所示:<?php echo print_wp_cart_button_for_product(\'Product Name\', Product Price); ?> 显然正在替换Product Name