Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress:如何在自定义插件中为文件创建重写规则_Php_Wordpress - Fatal编程技术网

Php WordPress:如何在自定义插件中为文件创建重写规则

Php WordPress:如何在自定义插件中为文件创建重写规则,php,wordpress,Php,Wordpress,我已经找了几个小时试图找到一个简单的答案,但我似乎找不到任何解决这个问题的方法。有很多重写标准URL的例子,但是没有从自定义插件中重写页面的例子 我创建了一个自定义插件,其中有一个名为test的特殊目录。测试目录有几个页面,分别是blah.php和shmeh.php。是否可以为这些页面创建重写规则,即: 非常感谢您提供的所有帮助。因此,您需要的基本是让Wordpress在用户访问时加载特定的页面模板(blah.php)http://example.com/blah/。此外,您需要在插件中完全生成

我已经找了几个小时试图找到一个简单的答案,但我似乎找不到任何解决这个问题的方法。有很多重写标准URL的例子,但是没有从自定义插件中重写页面的例子

我创建了一个自定义插件,其中有一个名为
test
的特殊目录。测试目录有几个页面,分别是
blah.php
shmeh.php
。是否可以为这些页面创建重写规则,即:


非常感谢您提供的所有帮助。

因此,您需要的基本是让Wordpress在用户访问
时加载特定的页面模板(
blah.php
)http://example.com/blah/
。此外,您需要在插件中完全生成它,而不实际创建任何页面或帖子。你在正确的轨道上。这里要做的是创建一个重写规则,该规则利用特定的查询变量来加载页面。这里是一步一步:

步骤1:重写规则

因此,在上面的代码中,您刚刚告诉Wordpress的
example.com/blah/
应该被视为用户访问
example.com/index.php?blah=true
。现在“blah”是一个查询变量,您将在下面的下一个函数中设置它。查询变量正是Wordpress调用的$\u GET变量。但是,它们必须在Wordpress中注册,以便它能够正确地存储值(在本例中为“true”)。我们将在下面的函数中执行此操作。还值得注意的是函数
“top”
中的第三个设置,它使此重写规则优先于其他重写规则。或者,在使用此重写规则之前,将其设置为“底部”将首先检查是否没有其他重写规则匹配

步骤2:查询变量

在上面的代码中,您只需向Wordpress注册查询变量“
blah
”。这样,当有人访问
example.com/blah/
,您的重写规则告诉Wordpress将其视为访问
example.com/index.php?blah=true
,Wordpress实际上会费心保存它的值(设置为
true
)。这样,您就可以在下一个函数中使用它,该函数将在用户访问您的url时加载所需的模板

步骤3:模板包含

在上面的代码中,只要告诉Wordpress在查询变量“
blah
”出现并设置为
true
时使用
blah.php
模板即可。在这种情况下,它之所以存在,是因为用户正在访问一个使用“
blah
”查询变量的重写规则的url。该函数检查“
blah
”查询变量是否存在,然后检查“
blah
”是否设置为true,如果是,则加载模板。还要注意,模板路径是
test/blah.php
。您正在使用
plugin\u dir\u path(\uu文件\uu)
根据插件的位置相对地包含模板。这样,它作为插件应该是相对的

步骤4:实际模板(blah.php)

模板文件需要加载页眉、页脚和侧边栏本身。使用
模板\u include
时,Wordpress不会像使用页面模板一样自动加载页眉和页脚。确保模板文件调用
获取页眉()
获取页脚()
获取侧边栏()
,以便获得完整的布局

注释


希望这能有所帮助,前几天我也在寻找类似的东西,我不得不艰难地找到答案。还值得注意的是,我在所有函数前面加了前缀“yourpluginname”。您可以将其更改为您想要的前缀,但也要确保更新函数名以匹配。

因此,本质上,您需要的是让Wordpress在用户访问
时加载特定的页面模板(
blah.php
)http://example.com/blah/
。此外,您需要在插件中完全生成它,而不实际创建任何页面或帖子。你在正确的轨道上。这里要做的是创建一个重写规则,该规则利用特定的查询变量来加载页面。这里是一步一步:

步骤1:重写规则

因此,在上面的代码中,您刚刚告诉Wordpress的
example.com/blah/
应该被视为用户访问
example.com/index.php?blah=true
。现在“blah”是一个查询变量,您将在下面的下一个函数中设置它。查询变量正是Wordpress调用的$\u GET变量。但是,它们必须在Wordpress中注册,以便它能够正确地存储值(在本例中为“true”)。我们将在下面的函数中执行此操作。还值得注意的是函数
“top”
中的第三个设置,它使此重写规则优先于其他重写规则。或者,在使用此重写规则之前,将其设置为“底部”将首先检查是否没有其他重写规则匹配

步骤2:查询变量

在上面的代码中,您只需向Wordpress注册查询变量“
blah
”。这样,当有人访问
example.com/blah/
,您的重写规则告诉Wordpress将其视为访问
example.com/index.php?blah=true
,Wordpress实际上会费心保存它的值(设置为
true
)。这样,您就可以在下一个函数中使用它,该函数将在用户访问您的url时加载所需的模板

步骤3:模板包含

在上面的代码中,您只是告诉Wordpress使用
blah.php
模板
/* Rewrite Rules */
add_action('init', 'yourpluginname_rewrite_rules');
function yourpluginname_rewrite_rules() {
    add_rewrite_rule( 'blah/?$', 'index.php?blah=true', 'top' );
}
/* Query Vars */
add_filter( 'query_vars', 'yourpluginname_register_query_var' );
function yourpluginname_register_query_var( $vars ) {
    $vars[] = 'blah';
    return $vars;
}
/* Template Include */
add_filter('template_include', 'yourpluginname_blah_template_include', 1, 1); 
function yourpluginname_blah_template_include($template)
{
    global $wp_query; //Load $wp_query object
    $page_value = $wp_query->query_vars['blah']; //Check for query var "blah"

    if ($page_value && $page_value == "true") { //Verify "blah" exists and value is "true".
        return plugin_dir_path(__FILE__).'test/blah.php'; //Load your template or file
    }

    return $template; //Load normal template when $page_value != "true" as a fallback
}