Добавление селектора классов HTML с помощью PHP

88
5

Я использую tyring для создания темы 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">

Обычно я помещаю его в одну строку, выше кода, потому что это "легче понять". У меня есть много вариантов на моей теме, поэтому эти условные утверждения действительно затрудняют чтение моего кода.

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

спросил(а) 2021-01-25T18:04:45+03:00 4 месяца, 3 недели назад
1
Решение
63

Создайте функцию:

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 ниже PHP 5.4, то лучше изменить последнюю строку на это:

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

Это будет работать в PHP <5.4, даже если short_open_tag выключен.

ответил(а) 2021-01-25T18:04:45+03:00 4 месяца, 3 недели назад
45

Идеально - иметь 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>

ответил(а) 2021-01-25T18:04:45+03:00 4 месяца, 3 недели назад
45

В Wordpress у вас есть несколько крючков и фильтров действий. В этом случае вы можете использовать фильтр body_class. Просто посмотрите следующий пример.

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

ответил(а) 2021-01-25T18:04:45+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема