Добавить чекбокс на экран редактирования поста для добавления класса к заголовку
Мне нужно, чтобы некоторые посты имели заголовки разного цвета, и я подумал, что удобнее всего это реализовать с помощью чекбокса на экране создания/редактирования поста. Как добавить такой чекбокс и затем получить его значение в шаблоне?
Спасибо
Да, верно, вам понадобится Пользовательское мета-поле, которое создаст чекбоксы на экране редактирования записи.

В данном случае это будут радиокнопки, так как нам нужно только одно значение.
Ниже приведен код, который создает это поле. Поместите его в файл functions.php вашей темы или создайте простой плагин, чтобы это стало независимым от темы.
/* Определяем пользовательское поле */
add_action( 'add_meta_boxes', 'wpse_61041_add_custom_box' );
/* Обрабатываем сохраненные данные */
add_action( 'save_post', 'wpse_61041_save_postdata' );
/* Добавляем блок в основную колонку на экранах редактирования записей и страниц */
function wpse_61041_add_custom_box() {
add_meta_box(
'wpse_61041_sectionid',
'Цвет заголовка',
'wpse_61041_inner_custom_box',
'post',
'side',
'high'
);
}
/* Выводим содержимое блока */
function wpse_61041_inner_custom_box($post)
{
// Используем nonce для проверки
wp_nonce_field( 'wpse_61041_wpse_61041_field_nonce', 'wpse_61041_noncename' );
// Получаем сохраненное значение, если его нет, выбираем "по умолчанию"
$saved = get_post_meta( $post->ID, 'title_color', true);
if( !$saved )
$saved = 'default';
$fields = array(
'red' => __('Красный', 'wpse'),
'green' => __('Зеленый', 'wpse'),
'blue' => __('Синий', 'wpse'),
'default' => __('По умолчанию', 'wpse'),
);
foreach($fields as $key => $label)
{
printf(
'<input type="radio" name="title_color" value="%1$s" id="title_color[%1$s]" %3$s />'.
'<label for="title_color[%1$s]"> %2$s ' .
'</label><br>',
esc_attr($key),
esc_html($label),
checked($saved, $key, false)
);
}
}
/* При сохранении записи сохраняем наши пользовательские данные */
function wpse_61041_save_postdata( $post_id )
{
// Проверяем, не автосохранение ли это
// Если это автосохранение, форма не отправлялась, и мы ничего не делаем
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// Проверяем, что запрос пришел с нашего экрана и с правильной авторизацией,
// так как save_post может вызываться в других случаях
if ( !wp_verify_nonce( $_POST['wpse_61041_noncename'], 'wpse_61041_wpse_61041_field_nonce' ) )
return;
if ( isset($_POST['title_color']) && $_POST['title_color'] != "" ){
update_post_meta( $post_id, 'title_color', $_POST['title_color'] );
}
}
код основан на этом ответе
Как использовать это в теме
При наличии соответствующих CSS-правил (h1.default, h1.red и т.д.), где бы вы ни хотели применить класс цвета к заголовку (index.php, single.php и т.д.), используйте что-то вроде:
<?php $title_color = get_post_meta( get_the_ID(), 'title_color', true); ?>
<h1 class="entry-title <?php echo esc_attr($title_color); ?>"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
Хорошо, хорошо. Вам также стоит изучить функцию checked.
chrisguitarguy
Ещё одно небольшое изменение, чтобы немного очистить callback-функцию. Возможно, стоит протестировать, чтобы убедиться, что она всё ещё работает как ожидается. Просто сделано так, чтобы не повторяться, и можно было легко добавлять новые цвета.
chrisguitarguy
Работа @brasofilo отличная, но если вы не хотите много кодить, то можете сделать то же самое через Произвольные поля. По умолчанию они скрыты. Вы можете сделать их видимыми через Настройки экрана. Создайте новое поле с именем color и укажите название цвета в поле значение. Затем добавьте этот код в файл header.php вашей темы, сразу после закрывающего тега </head>.
<style type="text/css">
/*Замените [color-name] на ваш цвет, например: red*/
#red {color:"red";}
#green {color:"green";}
#[color-name] {color:"[color-name]";}
#[color-name] {color:"[color-name]";}
</style>
<?php
global $post;
$color = get_post_meta(get_the_ID(), 'color', true);
$id = "id="
?>
Затем найдите <h1 class="entry-title" и добавьте внутрь этот код: <?php echo $id, $color;?>. Теперь, когда вам нужно изменить цвет заголовка, просто выберите поле color в выпадающем списке произвольных полей и укажите название цвета в поле значение.