Я часто использую «константы». Я устанавливаю их в functions.php, например, define('mytheme_town', 'Orlando');
а затем вызываю их в теме <?php echo mytheme_town ; ?>
.
Это просто и легко. Но мне нужно, чтобы они были специфичны для сайта (для мультисайта), поэтому я подумал, что можно добавить текущий blog_id к вызову темы и объявить константы для каждого мультисайта в functions.php? Я не знаю, как это закодировать, но чего я пытаюсь добиться в файле темы, это… <?php echo [current_blog]_mytheme_town ; ?>
…..
Например
В functions.php // устанавливаем константы для всех мультисайтов, использующих эту тему
// awebsite.org : site_id=1
define(‘1_mytheme_town’, ‘Орландо’);
определить(‘1_mytheme_subject’, ‘еда’);
определить(‘1_mytheme_p1’, ‘Это текст первого абзаца’);
// a Differentsite.com: site_id=2
определить(‘2_mytheme_town’, ‘Нью-Йорк’);
определить(‘2_mytheme_subject’, ‘вино’);
определить(‘2_mytheme_p1’, ‘Это текст первого абзаца’);
// Anothersite.net : site_id=3 define(‘3_mytheme_town’, ‘LA’);
определить(‘3_mytheme_subject’, ‘Пончики’);
определить(‘3_mytheme_p1’, ‘Это текст первого абзаца’);
В файлах темы вызовите константы, используя текущий blog_id, например…
<?php echo [current_blog]_mytheme_town ; ?>
<?php echo [current_blog]_mytheme_subject ; ?>
<?php echo [current_blog]_mytheme_p1 ; ?>
Я пытался весь день, но я просто предполагаю, и я действительно не знаю, что я делаю. Все, что я пробовал, работает, но просто повторяет текст кода.
1_mytheme_town
а не константа, определенная в functions.php.
Надеюсь, вы понимаете, что я пытаюсь объяснить.
Вы можете получить доступ к идентификатору блога, в котором вы находитесь,
global $blog_id;
а затем вы можете использовать его так, как вы хотите, чтобы он работал.Мне не удалось добавить
global $blog_id;
к определенной функции и поэтому вывести [blog_id]_[functions_defined_text] @Ashfame. Я могу заставить его отображать фактический # blog_id, за которым следует вызов функции шаблона. Я попробовал этоglobal $blog_id; echo $blog_id; echo _mytheme_town;
, но это простое эхо: 1_mytheme_town — 2_mytheme_town — 3_mytheme_town Можете ли вы привести демо-код вашей техники?Сначала создайте имя в переменной, а затем используйте переменную переменной.
$name=$blog_id.'_my_theme_town; echo $$name;
Есть ли ограничение на количество сайтов, которые я могу добавить таким образом @MikeSchinkel? Кроме того, я добавил обновление/получение для одного сайта, чтобы проверить ваш код, и он отлично сработал. Затем я добавил еще, но дополнительные сайты не работают. Кеш-плагины не активированы; мне нужно что-то «сбросить»/сбросить?
Я добавил код @MikeSchinkle для update_blog_option в функции для блога 1, чтобы протестировать его, и он отлично сработал. Затем я добавил update_blog_option к тому же вызову add_action в functions.php для дополнительных блогов (2 и 3), но они не работают? Я попытался повторно сохранить постоянные ссылки (которые, как я читал, помогают принудительно обновить что-то, связанное с functions.php). Можно ли изменить инициализацию add_action после добавления?
@ Thao — Используются ли на разных сайтах одна и та же тема?
Это @MikeSchinkel. Вот почему я пытаюсь использовать такой метод (чтобы оптимизировать свою рабочую нагрузку). Не каждый блог в Сети использует одну и ту же тему, но каждый блог, на который ссылается update_blog_option, использует ее. Мне было предложено, что после того, как get_site_option будет инициализирован в первый раз, оператор if больше не будет истинным,
if (!get_site_option('title_desc_p1_city_url_initialized'))
поэтому любая дополнительная информация, которую я добавляю, не будет обновляться. Итак, я попытался закомментировать оператор if, но это тоже не принесло мне удовольствия.Это предполагает, что когда вы ссылаетесь на «сайт» @MikeSchinkel, вы действительно имеете в виду «блог» на многосайтовом жаргоне WordPress (да, я думаю, что терминология странная, но это то, что есть). #смеющийся
Использование констант в том виде, в котором вы это делаете, очень отличается от того, как кодировал бы хороший программист WordPress. Константы очень негибкие и просто не так, как это обычно делается в WordPress.
Предполагая, что когда вы ссылаетесь на «сайт», вы действительно имеете в виду «блог» на многосайтовом языке WordPress (да, я думаю, что терминология странная, но это то, что есть), то почему бы не использовать
get_blog_option()
иupdate_blog_option()
вместе сget_site_option()
иupdate_site_option()
? (этот код находится вfunctions.php
файле темы вашего основного блога или в.php
файле обязательного для использования плагина, который вы, возможно, разрабатываете):Затем для доступа к вашей теме используйте следующий код:
Это намного больше похоже на WordPress, и вы обнаружите, что он намного более гибкий, и кто-то, кто знает WordPress, с большей вероятностью действительно поймет код, который вы оставите.
ОБНОВИТЬ
Основываясь на комментариях, я собираюсь предложить другой подход к инициализации. Вместо того, чтобы программист постоянно редактировал файл.PHP каждый раз, когда он хочет добавить новый сайт, метаданные сайта должны быть добавлены с помощью
'wpmu_new_blog'
хука, который вы можете увидеть здесь:Затем администратор сайта может отредактировать метаданные сайта по этому URL-адресу
/wp-admin/network/site-settings.php?id={$site_ID}
(конечно, заменив {$site_ID} новым номером сайта). Например:Прокрутите вниз до конца этой страницы, и вы увидите три (3) новых мета-значения сайта:
Это намного лучше, чем использование констант и редактирование
.php
файла. Ваши клиенты не будут знать, но подсознательно они будут благодарны вам за то, что вы не доставляете им головной боли в будущем.