优化wordpress类代码以避免冗余

时间:2019-09-28 18:41:29

标签: php wordpress

我现在已经完成了有关wordpress插件创建的简单培训。我创建了一个简单的插件,该插件将注册一些自定义的简码以在WordPress编辑器中使用引导程序类。 我想使插件代码更具可读性,并减少冗余代码的产生。现在,我有一个函数可以包装我在布局中使用的所有主要类,但是从可读性的角度来看,它太复杂了。

有没有更好的方式编写代码?我正在考虑使用require_once或类方法中的include函数创建一些文件以包含在内,但是我不确定是否可以使用,因为我正在使用输出缓冲区显示html代码。 我要测试的另一种解决方案是将各种列布局分成单个类方法,但是我不确定。

我以这种方式在测试页中使用它:

[page_col type="col-6" mobile="hide"]the post or page content[/page_col]

任何建议将不胜感激。

public function pageCol($atts, $content)
  {
    ob_start();
    $content = strip_tags($content, '<p><span><div><img>');
    $val = shortcode_atts(array(
        'type' => 'col-12',
        'mobile' => 'display'
    ),$atts);

    if( $val['mobile'] === 'hide' ){
      switch($val['type']){
        case 'col-3':
        ?>
          <div class="col-md-3 col-lg-3 d-none d-sm-none d-md-block">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-4':
        ?>
          <div class="col-md-4 col-lg-4 d-none d-sm-none d-md-block">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-6':
        ?>
          <div class="col-md-6 col-lg-6 d-none d-sm-none d-md-block">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-8':
          ?>
          <div class="col-md-8 col-lg-8 d-none d-sm-none d-md-block">
            <?php echo $content; ?>
          </div>
          <?php
          return ob_get_clean();
          break;
        case 'col-12':
          ?>
          <div class="col-md-12 col-lg-12 d-none d-sm-none d-md-block">
            <?php echo $content; ?>
          </div>
          <?php
          return ob_get_clean();
          break;
      }
    }
    else{
      switch($val['type']){
        case 'col-3':
        ?>
// I want to require the file instead of writing the code inside the switch() statement
// example: include 'my-col-layout.php';
          <div class="col-sm-12 col-md-3 col-lg-3">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-4':
        ?>
          <div class="col-sm-12 col-md-4 col-lg-4">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-6':
        ?>
          <div class="col-sm-12 col-md-6 col-lg-6">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-8':
        ?>
          <div class="col-sm-12 col-md-8 col-lg-8">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
        case 'col-12':
        ?>
          <div class="col-sm-12 col-md-12 col-lg-12">
            <?php echo $content; ?>
          </div>
        <?php
          return ob_get_clean();
          break;
      }
    }
  }

1 个答案:

答案 0 :(得分:1)

你所拥有的几乎是过大了。 switch语句根本没有理由,因为您的col-mdcol-lg具有相同的值。您也可以丢掉ob_start()

我认为您还应该重新格式化短代码的使用方式,因此用户只需输入列号即可,例如6col-6的比较,这样一来,您就可以只将那个值插入col-md-##中。

[page_col type="6" mobile="hide"]the post or page content[/page_col]

public function pageCol($atts, $content) {

    $content = strip_tags($content, '<p><span><div><img>');

    $val = shortcode_atts(array(
        'type' => '12',
        'mobile' => 'display'
    ),$atts);

    $output = '';

    if( $val['mobile'] === 'hide' ){
        $output = '<div class="col-md-' . $val['type'] . ' col-lg-' . $val['type'] . ' d-none d-sm-none d-md-block">' . $content . '</div>';
    } else {
        $output = '<div class="col-sm-12 col-md-' . $val['type'] .' col-lg-' . $val['type'] . '">' . $content . '</div>';
    }

    return $output;
}