另一个选项,取决于您需要传递的参数类型。我们将其称为(2a)。您还可以创建PHP脚本,该脚本输出动态生成的text/css
或text/javascript
而不是text/html
,并使用GET参数而不是通过加载WordPress为它们提供所需的数据。当然,这仅在需要传递相对少量的相对紧凑的参数时才有效。因此,举例来说,假设您只需要传递帖子的URL或文件目录或类似目录,则可以执行以下操作:
在header.php中:
<script type="text/javascript" src="<?php print get_stylesheet_directory_uri();
?>/fancy-js.php?foo=bar&url=<?php print urlencode(get_permalink($post->ID)); ?>"></script>
在fancy-js.php中:
<?php
header("Content-type: text/javascript");
?>
foo = <?php print json_encode($_GET['foo']); ?>;
url = <?php print json_encode($_GET['url']); ?>;
等等
但这仅允许您访问直接在GET参数中传递的数据。并且只有在您需要传递的事物的数量相对较小并且这些事物的表示形式相对紧凑时,它才起作用。(基本上只有几个字符串或数字值-用户名,例如目录,而不是用户最近发布的所有内容或类似内容的列表。)
至于这些选项中哪一个是最好的,我不知道。这取决于您的用例。选项(1)具有简单的优点,并且可以轻松访问任何可能需要的WordPress数据,而不会造成两次加载WordPress的性能损失。除非您有充分的理由不这样做(例如,由于需要使用样式表或脚本的大小),否则几乎可以肯定这是您应该做的。
如果尺寸太大而无法在一页的重量上引起问题,则可以尝试(2)或(2a)。
否则-这可能是一个更好的主意-您可以尝试将脚本或样式表的实际使用动态数据的部分与可以静态指定的部分分开。假设您有一个样式表,需要从WordPress传递目录,以便为#my-fancy元素设置背景参数。您可以将所有这些放入head元素中:
<style type="text/css">
#my-fancy-element {
background-image: url(<?php print get_stylesheet_directory_uri(); ?>images/fancy.png);
padding: 20px;
margin: 20px;
font-weight: bold;
text-transform: uppercase;
font-size: 12pt;
/* ... KB and KB of additional styles ... */
}
#another-fancy-element {
/* ... KB and KB of additional styles ... */
}
/* ... KB and KB of additional styles ... */
</style>
但是,为什么需要这样做呢?这里只有一行取决于WordPress的数据。最好只拆分依赖WordPress的行:
<style type="text/css">
#my-fancy-element {
background-image: url(<?php print get_stylesheet_directory_uri(); ?>images/fancy.png);
}
</style>
将其他所有内容放入通过标准链接元素(style.css或其他内容)加载的静态样式表中:
#my-fancy-element {
/* background-image provided dynamically */
padding: 20px;
margin: 20px;
font-weight: bold;
text-transform: uppercase;
font-size: 12pt;
/* ... KB and KB of additional styles ... */
}
#another-fancy-element {
/* ... KB and KB of additional styles ... */
}
/* ... KB and KB of additional styles ... */
并让层叠进行工作。
JavaScript也是如此:而不是这样做:
<script type="text/javascript">
// Here comes a huge function that uses WordPress data:
function my_huge_function () {
// Do a million things ...
jQuery('#my-fancy').append('<a href="'+<?php json_encode(get_permalink($GLOBALS['post']->ID)); ?>+'">foo</a>);
// Do a million more things ...
my_other_function(<?php print json_encode(get_userdata($GLOBALS['post']->post_author); ?>);
}
function my_other_function (user) {
// Do a million things ...
}
</script>
而是在head元素中添加以下内容:
<script type="text/javascript">
var WordPressPostData = {
url: <?php print json_encode(get_permalink($GLOBALS['post']->ID)); ?>,
author: <?php print json_encode(get_userdata($GLOBALS['post']->post_author)); ?>
}
</script>
然后将其余的放入静态JavaScript文件中,重写my_huge_function()和my_other_function()以使用全局WordPressPostData.url和WordPressPostData.author。
40K的CSS或40K的JS几乎总是可以拆分为<1K,这实际上取决于动态数据,其余的可以在静态外部文件中指定,然后使用级联(对于CSS)或全局可访问的方式重新组合变量(对于JS,是全局变量,DOM元素或您喜欢的其他任何笨拙的漏洞)。