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