ada*_*amj 1 php wordpress wordpress-plugin
我一直在寻找几个小时试图找到一个直截了当的答案,但我似乎无法找到解决这个问题的任何东西.有许多重写标准URL的例子,但没有任何关于从自定义插件中重写页面的内容.
我已经创建了一个自定义插件,其中包含一个名为的特殊目录test.测试目录有几个blah.php和shmeh.php.是否有可能创建重写规则,这些页面即http://example.com/blah,http://example.com/shmeh
非常感谢你的帮助.
基本上你正在寻找的是让Wordpress blah.php在用户访问时加载特定的页面模板()http://example.com/blah/.此外,您需要在插件中完全生成它而不实际创建任何页面或帖子.你走在正确的轨道上.您要在此处执行的操作是创建一个重写规则,该规则使用特定的查询var来加载页面.这是一步一步:
第1步:重写规则
http://codex.wordpress.org/Function_Reference/add_action
http://codex.wordpress.org/Plugin_API/Action_Reference/init
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
/* Rewrite Rules */
add_action('init', 'yourpluginname_rewrite_rules');
function yourpluginname_rewrite_rules() {
add_rewrite_rule( 'blah/?$', 'index.php?blah=true', 'top' );
}
Run Code Online (Sandbox Code Playgroud)
所以在上面的代码中,你只是告诉Wordpress example.com/blah/应该被视为用户正在访问example.com/index.php?blah=true.现在,"blah"是一个查询var,您将在下面的下一个函数中设置它.查询变量就是Wordpress调用$ _GET变量的内容.但是它们必须在Wordpress中注册才能正确存储该值(在这种情况下为"true").我们将在下一个函数中执行以下操作.同样值得注意的是函数中的第三个设置"top",它使这个重写规则优先于其他重写规则.或者,将其设置为"bottom"将检查在使用此之前没有其他重写规则首先匹配.
第2步:查询变量
http://codex.wordpress.org/Function_Reference/add_filter
http://codex.wordpress.org/Plugin_API/Filter_Reference/query_vars
/* Query Vars */
add_filter( 'query_vars', 'yourpluginname_register_query_var' );
function yourpluginname_register_query_var( $vars ) {
$vars[] = 'blah';
return $vars;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,您只需blah使用Wordpress 注册查询var" ".这样,当有人访问时example.com/blah/,你的重写规则告诉Wordpress像对待他们一样对待它example.com/index.php?blah=true,Wordpress实际上很难保存它的值(设置为true).这样您就可以在下一个函数中使用它,它会在用户访问您的URL时加载您想要的模板.
第3步:包含模板
http://codex.wordpress.org/Function_Reference/add_filter
http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include
http://codex.wordpress.org/Class_Reference/WP_Query#Interacting_with_WP_Query
http://codex.wordpress.org/Function_Reference/plugin_dir_path
/* 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
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,您只是告诉Wordpress blah.php在查询var" blah"出现并设置为的任何时候使用您的模板true.在这种情况下,它存在是因为用户正在访问具有使用" blah"查询var 的重写规则的URL .该函数检查是否存在" blah"查询var,然后检查" blah"是否设置为true,如果是,则加载模板.另请注意,模板路径是test/blah.php.您正在使用plugin_dir_path(__FILE__)相对包含基于插件位置的模板.这样它就像插件一样是相对的.
第4步:实际模板(blah.php)
http://codex.wordpress.org/Function_Reference/get_header
http://codex.wordpress.org/Function_Reference/get_footer
http://codex.wordpress.org/Function_Reference/get_sidebar
您的模板文件需要加载页眉,页脚和侧边栏本身.使用时template_include,Wordpress不会像使用页面模板一样自动加载页眉和页脚.要确保你的模板文件的调用get_header(),get_footer()以及get_sidebar()让你得到你的完整布局.
笔记
希望这会有所帮助,我前几天正在寻找类似的东西,并且不得不通过艰难的方式解决这个问题.值得注意的是,我已将所有函数作为"yourpluginname_"加上前缀.您可以将此更改为您想要的前缀,但请务必更新函数名称以匹配.
| 归档时间: |
|
| 查看次数: |
2259 次 |
| 最近记录: |