具有自定义主题的插件处理URL

时间:2013-05-24 作者:Andrew M

我需要开发一个插件,其中需要创建一个特殊的页面。该页面将有一个与网站其余部分完全不同的设计,并将位于特定的URL。

我意识到短代码是插件在页面上自行运行的“正确”方式,但我如何真正超越页面的整个主题,并用我自己的内容替换它呢?在这种情况下,由于它是一个单独的页面,我不想实际创建一个完整的Wordpress主题--我只需要能够从一块空白的石板开始,然后我就可以使用自己的HTML了。

1 个回复
SO网友:Matthew Boynes

这是我通常做的精简版。用你想要的任何东西替换wpse100645,但要尊重你不想干扰网站内容的事实。

<?php
/**
 * Create a custom path and process code when it gets triggered
 * 
 * @author Matthew Boynes
 */

if ( !class_exists( \'WPSE_100645_Custom_Page\' ) ) :

class WPSE_100645_Custom_Page {

    public function __construct() {
        # Add our query_var, \'wpse100645\'
        add_filter( \'query_vars\',    array( &$this, \'add_query_var\' ) );

        # setup rewrite rules for our path
        add_action( \'init\',          array( &$this, \'add_rewrite_rules\' ), 5 );

        # We\'re doing this on parse_query to ensure that query vars are set
        add_action( \'parse_query\',   array( &$this, \'dispatch_path\' ) );
    }

    /**
     * Add rewrite rules for our path
     *
     * @return void
     */
    public function add_rewrite_rules() {
        add_rewrite_rule( "wpse100645/?$", \'index.php?wpse100645=1\', \'top\' );
    }

    /**
     * Add the class query var, wpse100645
     *
     * @param array $qv The current query vars
     * @return array The modified query vars
     */
    public function add_query_var( $qv ) {
        $qv[] = \'wpse100645\';
        return $qv;
    }

    /**
     * This is where the magic happens.
     *
     * @uses WPSE_100645_Custom_Page::$paths
     * @return void
     */
    public function dispatch_path() {
        if ( get_query_var( \'wpse100645\' ) ) {

            # Do your magic here. You probably want to call another function to keep the code orthoginal.

            # Then, you\'ll want to...
            exit; # So that WordPress doesn\'t continue the rest of the chain
        }
    }
}

new WPSE_100645_Custom_Page();

endif;
这里发生了什么事首先,我们要添加一个查询变量,wpse100645 我们正在为该查询变量添加一个重写规则。这样,无论用户是否在域中启用了永久链接,都可以工作。com/?wpse100645=1或位于域。com/wpse100645/。

下一步,何时parse_query 激发时,我们检查查询变量是否存在。如果是,我们运行想要的任何代码并退出(参见dispatch_path). 因此,插件可以呈现它想要的任何HTML,因为还没有加载任何模板文件。它也会非常快,因为主查询还没有运行。这一切都在请求链中处于相当高的位置。请注意,如果您没有exit, 代码完成后,主页将呈现。

结束

相关推荐

如何在u-plugins文件夹中使用WooCommerce?

我不希望客户端错误地停用woocommerce插件。我最近在wordpress中遇到了一个叫做必须使用插件的概念。(http://codex.wordpress.org/Must_Use_Plugins)我只是想知道是否有可能将woocommerce作为必备插件使用。