Ще один варіант, залежно від типу параметрів, які потрібно ввести. Назвемо це (2а). Ви також можете створювати 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>
У фантазії-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. Ви можете помістити все це в головний елемент:
<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>
Замість цього покладіть щось подібне до головного елемента:
<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), або глобально доступний змінні (глобальні елементи, елементи DOM або будь-який інший кубічний отвір для JS).