使用PHP添加HTML类选择器

时间:2014-06-22 16:14:55

标签: php html

我正在构建一个Wordpress主题,用户可以选择一些可用的选项。

假设我有一个选项,用户可以从可用选项中选择列宽。在我的page.php中,我正在使用此代码添加类

<div class="<?php if ( my_column_width == '1' ) : ?> full-width
            <?php elseif ( my_column_width == '2' ) : ?> one-two
            <?php elseif ( my_column_width == '3' ) : ?> one-three">

通常我把它放在一行中,代码只是因为它更容易理解。 我的主题有很多选项,所以那些条件语句真的让我很难阅读我的代码。

有人可以告诉我更好的方法吗?我希望那些使用我的主题的人在阅读我的代码时能够理解逻辑。

3 个答案:

答案 0 :(得分:1)

创建一个函数:

function get_my_option_class($width)
{
    switch ($witdh) {
        case 2:
            $class = 'one-two';
            break;
        case 3:
            $class = 'one-three';
            break;
        case 1:
        default:
            $class = 'full-width';
    }

    return $class;
}

然后你会这样做:

<div class="<?= get_my_option_class($my_column_width) ?>">

函数是可重用的,并且比模板中的任何逻辑硬编码要好得多。 如果此代码应该在低于PHP 5.4的PHP上运行,那么最好将最后一行更改为:

<div class="<?php echo get_my_option_class($my_column_width) ?>">

这适用于PHP&lt; 5.4即使short_open_tag已关闭。

答案 1 :(得分:0)

理想的做法是让switch为您准备课程,然后将此课程安排到您的代码中。

<?php

switch ($my_col_width) {
    case 1:
        $class = 'full-width';
        break;
    case 2:
        $class = 'two-cols';
        break;
    case 3:
        $class = 'three-cols';
        break;
    default:
        $class = 'four-cols';
        break;
}

?>

<div class="<?php echo $class; ?>">text</div>

其次,单行变体是

<div class="box-<?php echo $my_col_width; ?>">text</div>

答案 2 :(得分:0)

在Wordpress中,您有几个动作挂钩和过滤器。在这种情况下,您可以使用&#34; body_class&#34;过滤。请看下面的例子。

add_filter('body_class', 'my_body_classes_function');
function my_body_classes_function( $classes, $col_width = 0 ) {
    // your settings here
    switch ($col_width) {
        case 1 :
            $classes[] = 'my_col1_class';
            break;
        default :
            $classes[] = 'my_default_class';
            break;
    }

    return $classes;
}

将此功能添加到主题的functions.php中,并将以下HTML代码添加到模板中。

<body <?php body_class(); ?>>

您还应该查看wordpress函数参考:http://codex.wordpress.org/Function_Reference/body_class#Add_Classes_By_Filters