thelonecuber
  • 0
Новичок

Как я могу добавить blog_id к… Echo [функция-определенная-константа]?

  • 0

Я часто использую «константы». Я устанавливаю их в 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.

Надеюсь, вы понимаете, что я пытаюсь объяснить.

Share
  1. Вы можете получить доступ к идентификатору блога, в котором вы находитесь, global $blog_id; а затем вы можете использовать его так, как вы хотите, чтобы он работал.

    • 0
    • Мне не удалось добавить 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 Можете ли вы привести демо-код вашей техники?

      • 0
    • Сначала создайте имя в переменной, а затем используйте переменную переменной. $name=$blog_id.'_my_theme_town; echo $$name;

      • 0
    • Есть ли ограничение на количество сайтов, которые я могу добавить таким образом @MikeSchinkel? Кроме того, я добавил обновление/получение для одного сайта, чтобы проверить ваш код, и он отлично сработал. Затем я добавил еще, но дополнительные сайты не работают. Кеш-плагины не активированы; мне нужно что-то «сбросить»/сбросить?

      • 0
    • Я добавил код @MikeSchinkle для update_blog_option в функции для блога 1, чтобы протестировать его, и он отлично сработал. Затем я добавил update_blog_option к тому же вызову add_action в functions.php для дополнительных блогов (2 и 3), но они не работают? Я попытался повторно сохранить постоянные ссылки (которые, как я читал, помогают принудительно обновить что-то, связанное с functions.php). Можно ли изменить инициализацию add_action после добавления?

      • 0
    • @ Thao — Используются ли на разных сайтах одна и та же тема?

      • 0
    • Это @MikeSchinkel. Вот почему я пытаюсь использовать такой метод (чтобы оптимизировать свою рабочую нагрузку). Не каждый блог в Сети использует одну и ту же тему, но каждый блог, на который ссылается update_blog_option, использует ее. Мне было предложено, что после того, как get_site_option будет инициализирован в первый раз, оператор if больше не будет истинным, if (!get_site_option('title_desc_p1_city_url_initialized')) поэтому любая дополнительная информация, которую я добавляю, не будет обновляться. Итак, я попытался закомментировать оператор if, но это тоже не принесло мне удовольствия.

      • 0
    • Это предполагает, что когда вы ссылаетесь на «сайт» @MikeSchinkel, вы действительно имеете в виду «блог» на многосайтовом жаргоне WordPress (да, я думаю, что терминология странная, но это то, что есть). #смеющийся

      • 0
  2. Использование констант в том виде, в котором вы это делаете, очень отличается от того, как кодировал бы хороший программист WordPress. Константы очень негибкие и просто не так, как это обычно делается в WordPress.

    Предполагая, что когда вы ссылаетесь на «сайт», вы действительно имеете в виду «блог» на многосайтовом языке WordPress (да, я думаю, что терминология странная, но это то, что есть), то почему бы не использовать get_blog_option() и update_blog_option() вместе с get_site_option() и update_site_option() ? (этот код находится в functions.php файле темы вашего основного блога или в .php файле обязательного для использования плагина, который вы, возможно, разрабатываете):

    add_action('init','yoursite_init');
    function yoursite_init() {
      if (!get_site_option('town_subject_p1_initialized')) {
        
        update_blog_option(1,'town','Orlando');
        update_blog_option(1,'subject','food');
        update_blog_option(1,'p1','This is the first paragraph text');
        
        update_blog_option(2,'town','New York');
        update_blog_option(2,'subject','wine');
        update_blog_option(2,'p1','This is the first paragraph text');
        
        update_blog_option(3,'town','LA');
        update_blog_option(3,'subject','donuts');
        update_blog_option(3,'p1','This is the first paragraph text');
      
        update_site_option('town_subject_p1_initialized',true);
      
      }
    }
    

    Затем для доступа к вашей теме используйте следующий код:

    <?php echo get_blog_option($blog_id,'town'); ?>
    <?php echo get_blog_option($blog_id,'subject'); ?>
    <?php echo get_blog_option($blog_id,'p1'); ?>
    

    Это намного больше похоже на WordPress, и вы обнаружите, что он намного более гибкий, и кто-то, кто знает WordPress, с большей вероятностью действительно поймет код, который вы оставите.

    ОБНОВИТЬ

    Основываясь на комментариях, я собираюсь предложить другой подход к инициализации. Вместо того, чтобы программист постоянно редактировал файл.PHP каждый раз, когда он хочет добавить новый сайт, метаданные сайта должны быть добавлены с помощью 'wpmu_new_blog' хука, который вы можете увидеть здесь:

    add_action('wpmu_new_blog','getsunrise_wpmu_new_blog');
    function getsunrise_wpmu_new_blog( $blog_id ) {
      update_blog_option( $blog_id,'town','Pending...');
      update_blog_option( $blog_id,'subject','Pending...');
      update_blog_option( $blog_id,'p1','Pending...');
    }
    

    Затем администратор сайта может отредактировать метаданные сайта по этому URL-адресу /wp-admin/network/site-settings.php?id={$site_ID} (конечно, заменив {$site_ID} новым номером сайта). Например:

    Скриншот редактирования настроек блога в WordPress Multisite

    Прокрутите вниз до конца этой страницы, и вы увидите три (3) новых мета-значения сайта:

    Скриншот редактирования дополнительных метаданных сайта для блога в WordPress Multisite

    Это намного лучше, чем использование констант и редактирование .php файла. Ваши клиенты не будут знать, но подсознательно они будут благодарны вам за то, что вы не доставляете им головной боли в будущем.

    • 0

Оставить ответ

You must login to add an answer.