1) 将每个主题文件分开,以便顶部有PHP,底部有HTML。然后,在HTML部分,像这样插入变量:
<?= $view->MY_VAR ?>
或使用
PHP Alternative Syntax 循环和if/then/else条件的填充最少。关键字--最小值。请参见,大部分PHP应该位于文件的顶部。
你可能在挠头为什么$view->MY_VAR
. 好吧,原因如下:
$view = (object) array()
$view->MY_VAR1 = \'<strong>Test1</strong>\';
$view->MY_VAR2 = \'<em>Test2</em>\';
print_r($view);
看看调试有多容易?另外,因为我在变量名上使用了所有的大写字母,所以我可以在页面的HTML部分轻松找到它们。我为什么叫它
$view
? 因为它比打字短
$template
, 因为了解这种变量注入方式的人通常都知道一种叫做MVC(计算机科学术语)的东西,其中V代表视图。
2) 将包含的任何库或类文件移动到PHP文件的顶部,例如:
require_once(\'mailer.php\');
require_once(\'gallery.static.class.php\');
3)按照库包括的内容,设置任何常量或静态信息,或从
get_option()
API。
4) 在“设置”初始化区域(步骤3)之后,执行以下操作$_GET
, $_SERVER
, 或$_POST
您读取这些内容并将其粘贴到变量中的设置,或者可能需要对其执行以下操作strip_tags()
, stripslashes()
, trim()
, 基本上你应该做任何输入处理,而不是做任何真正的硬核编程。
5) 在GET/POST变量处理(步骤4)之后,添加这段代码,注意我使用了“mytheme\\uu0”作为主题名称的前缀,但您可以将“mytheme\\u0”更改为其他名称。
// expose our WordPress plugin event hook - pre, meaning after GET/POST processing but before actually doing anything else
$sHook = strtolower(basename(__FILE__));
$sHook = str_replace(\'.php\',\'\',$sHook);
$sHook = str_replace(\'-\',\'_\',$sHook);
$sHook = str_replace(\'.\',\'_\',$sHook);
$sHook = preg_replace(\'/[^a-z0-9\\_]/\',\'\',$sHook);
@ do_action(\'mytheme_pre_\' . $sHook,get_defined_vars());
6)在您进行
?>
在开始执行文件的HTML部分之前,请添加以下代码片段:
// expose our plugin post event hook - post, meaning right before showing content
@ do_action(\'mytheme_post_\' . $sHook,get_defined_vars());
// turn on output buffering
@ ob_start();
7)在文件末尾,在所有HTML之后,添加以下代码片段:
<?php
try {
$sContent = ob_get_contents();
ob_end_clean();
$sContent = apply_filters(\'mytheme_\' . $sHook,$sContent,get_defined_vars());
echo $sContent;
} catch (Exception $e) {
echo "\\n<!-- ob_* function error -->\\n";
}
// no ending ?> is required here
//////////////
现在已经完成了,您可以编写一个新的插件add_filter()
或add_action()
, 您的回调函数将获得页面的所有已定义变量(如果是add_filter()
), 你几乎可以覆盖主题中的任何内容。
您可以使用echo "<h2>$sHook</h2>\\n";
在页面上记录所有事件挂钩的内容。
不要忘记在你用主题创建的管理面板上这样做,而不仅仅是在主题的前端。
注意,在上面的几行中,您可以通过几个函数(例如用于查找钩子名称的函数)稍微减少这一点。只是不要把do_action()
, apply_filters()
, 或get_defined_vars()
在一个函数或事物中,它们不会像您期望的那样工作。