WordPress 多站点开发技巧:在 PHP 中插入 Shortcode,以及仅主站/子站生效的写法

VFX大学 wordpress开发 WordPress 多站点开发技巧:在 PHP 中插入 Shortcode,以及仅主站/子站生效的写法

标签: ,

正在查看 0 条回复
  • 作者
    帖子
    • #596

      追光
      管理员

      以下是一篇完整的 WordPress 多站点开发实用技巧文章,重点讲解:

      1. 如何在 PHP 中调用短代码(Shortcode)

      2. 如何设置“仅主站显示”或“仅子站显示”的逻辑

      3. 可扩展场景建议


      💡 WordPress 多站点开发技巧:在 PHP 中插入 Shortcode,以及仅主站/子站生效的写法

      WordPress 多站点(Multisite)架构下,许多功能需要根据不同子站点、主站点的差异进行定制。例如插入幻灯片、广告模块、文章推荐等,是否显示或调用何种内容,常常依赖于当前站点环境。

      本篇将系统性分享如何在 PHP 模板中调用 Shortcode,并实现「仅主站可见」、「仅子站可见」、「全站可见」的控制逻辑。


      ✅ 一、在 PHP 中插入 Shortcode 的标准方式

      在模板或函数文件中,我们可以通过 do_shortcode() 来调用任意 WordPress 短代码。

      🔹 基本语法:

      echo do_shortcode('[shortcode 参数="值"]');

      🔹 示例:插入幻灯片

      <?php echo do_shortcode('        	
              <script>
              jQuery( document ).ready( function( $ ) {
                  if ( $( 'body' ).hasClass( 'gp-theme' ) ) {
                      $( "#ghostpool_slider_wrapper_1.flexslider" ).flexslider( { 
                          animation: "fade",
                          slideshowSpeed: 5000,
                          animationSpeed: 600,
                          directionNav: false,			
                          controlNav: true,				
                          pauseOnAction: true, 
                          pauseOnHover: false,
                          touch: true,
                          start: function( slider ) {
                              // Pause Slider
                              $( "#ghostpool_slider_wrapper_1 .flex-control-nav li a, #ghostpool_slider_wrapper_1 .video-image" ).click( function() { 
                                  slider.pause(); 
                              } );
                          }
                      } );	
                      // Resize Video Player
                      $( window ).load( function(){
                          resizePlayer();
                          $( window ).resize( function() {
                              resizePlayer();
                          } );	
                      } );
                      function resizePlayer() {
                          parentContainer = $( "#ghostpool_slider_wrapper_1 .slides" ).parent().attr( 'id' );
                          sliderWidth = $( '#' + parentContainer ).width();
                          newVideoWidth = sliderWidth;
                          newVideoHeight = ( sliderWidth * 63 ) / 915;
                          $( "#ghostpool_slider_wrapper_1.flexslider .slides > li, #ghostpool_slider_wrapper_1.flexslider .video-image, #ghostpool_slider_wrapper_1.flexslider iframe, #ghostpool_slider_wrapper_1.flexslider video, #ghostpool_slider_wrapper_1.flexslider object, #ghostpool_slider_wrapper_1.flexslider embed" ).width( newVideoWidth ).height( newVideoHeight );						
                      }
                      // Show All Video Images & Captions
                      $( "#ghostpool_slider_wrapper_1 .flex-control-nav li a" ).click( function() {
                          $( '#ghostpool_slider_wrapper_1 .video-image' ).show();
                          $( '#ghostpool_slider_wrapper_1 .video-player' ).hide();
                          $( '#ghostpool_slider_wrapper_1 .caption' ).show();
                      } );	
                  }	
              });			
              </script>
              '); ?>

      ✅ 二、仅主站显示内容的写法

      多站点中,主站是最初安装的站点,站点 ID 为 1,你可以用以下方式进行判断。

      🔹 方法 1:使用

      is_main_site()

      <?php if ( is_main_site() ) : ?>
      <div class="only-main-site">
      <?php echo do_shortcode('[your_shortcode]'); ?>
      </div>
      <?php endif; ?>

      🔹 方法 2:判断站点 ID(更明确)

      <?php if ( get_current_blog_id() === 1 ) : ?>
      <?php echo do_shortcode('[your_shortcode]'); ?>
      <?php endif; ?>

      ✅ 三、仅子站显示内容的写法

      若你希望排除主站,仅在子站点中显示:

      🔹 方法 1:

      ! is_main_site()

      <?php if ( ! is_main_site() ) : ?>
      <div class="only-subsite">
      <?php echo do_shortcode('[your_shortcode]'); ?>
      </div>
      <?php endif; ?>

      🔹 方法 2:站点 ID > 1

      <?php if ( get_current_blog_id() > 1 ) : ?>
      <?php echo do_shortcode('[your_shortcode]'); ?>
      <?php endif; ?>

      ✅ 四、所有站点都显示内容(无任何限制)

      如果你希望所有站点(主站 + 子站)都显示该内容,只需直接调用:

      <div class="global-shortcode">
      <?php echo do_shortcode('[your_shortcode]'); ?>
      </div>

      ✅ 五、附加技巧:根据站点 ID 显示不同内容

      你可以对不同子站调用不同参数,例如根据站点 ID 使用不同分类 ID:

      
      <?php
      $blog_id = get_current_blog_id();
      
      if ($blog_id === 1) {
        echo do_shortcode('  '); // 主站用分类 100
      } elseif ($blog_id === 2) {
        echo do_shortcode('  '); // 子站 2 用分类 200
      } else {
        echo do_shortcode('  '); // 其他站点默认分类
      }
      ?>

      📌 六、推荐实践场景

      场景

      判断逻辑

      使用方法

      首页显示幻灯片

      is_front_page()

      搭配 Shortcode 调用

      仅主站首页显示

      is_main_site() && is_front_page()

      精确控制

      子站调用不同内容

      get_current_blog_id() 分支

      动态适配

      所有站显示相同内容

      无条件输出

      无限制共享模块


      ✅ 总结

      WordPress 多站点环境下,良好的结构和判断逻辑可以大大提高代码复用率与可维护性。通过 do_shortcode()配合 is_main_site()get_current_blog_id(),你可以轻松实现:

      • 精准定位显示内容的站点和位置

      • 跨站点共享模块并定制差异化参数

      • 动态内容插入支持,提升运营效率

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。