我现在已经完成了有关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;
}
}
}
答案 0 :(得分:1)
你所拥有的几乎是过大了。 switch
语句根本没有理由,因为您的col-md
和col-lg
具有相同的值。您也可以丢掉ob_start()
。
我认为您还应该重新格式化短代码的使用方式,因此用户只需输入列号即可,例如6
与col-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;
}