Вопрос или проблема
У меня возникают трудности с изменением слага страницы архива. Цель состоит в том, чтобы создать страницу, которую можно редактировать из админки WP со слагом speakers
, но этот слаг уже занят страницей архива. Это должно быть удобным для клиента, поэтому редактирование не должно происходить только в php. Я готов сделать все, что кто-то считает лучшей идеей для этого.
Идеи:
- полностью удалить страницу архива
- изменить слаг на
speaker
илиpresenter
, так я смогу создать страницу со слагомspeakers
- сделать страницу архива редактируемой
У кого-нибудь есть идеи по этому поводу? Я создал пользовательский тип записи и попытался установить has_archive
в false
и создать массив слагов, но это не сработало. Если просто установить его на ‘false’, то появляется список обычных постов.
Спасибо!
Есть более простой способ, вообще не беспокойтесь о странице.
Вместо этого сохраните содержимое в параметре или модификации темы и используйте API настроек/кастомайзера для редактирования содержимого.
Чтобы сделать textarea
, хранящий содержимое в вашей форме, полноценным редактором, используйте функцию wp_editor
, чтобы получить WYSIWYG-редактор, который выглядит и работает как экран редактирования страницы. Используйте get_option
или get_theme_mod
, чтобы получить содержимое на фронтенде, и пропустите его через фильтр the_content
, чтобы шорткоды oembeds и абзацы работали.
Например, вот как добавить редактируемую область содержимого в нижнем колонтитуле в кастомайзер ( взято отсюда )
add_action( 'customize_register', 'your_customizer' );
function your_customizer( $wp_customize ) {
$wp_customize->add_section(
'appearance_settings',
array(
'title' => __('Настройки внешнего вида'),
'description' => __('Изменить параметры дизайна'),
'priority' => 120,
)
);
$wp_customize->add_setting( 'footer_content',
array(
'default'=>'по умолчанию'
));
$wp_customize->add_control(
new Example_Customize_Editor_Control(
$wp_customize,
'footer_content',
array(
'label' => 'Содержимое нижнего колонтитула',
'section' => 'appearance_settings',
'settings' => 'footer_content'
)
)
);
}
Вот управление содержимым редактора:
if(class_exists('WP_Customize_Control')){
class Example_Customize_Editor_Control extends WP_Customize_Control {
public $type="textarea";
public function render_content() {
?>
<label>
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
<?php
$content = $this->value();
$editor_id = $this->id;
$settings = array( 'media_buttons' => true, 'drag_drop_upload'=>true );
wp_editor( $content, $editor_id, $settings );
?>
</label>
<?php
}
}
}
Вот немного JS для обновления области предварительного просмотра:
jQuery(document).ready(function($){
$('textarea[name="footer_content"]').attr('data-customize-setting-link','footer_content');
setTimeout(function(){
var editor2 = tinyMCE.get('footer_content');
if(editor2){
editor2.onChange.add(function (ed, e) {
// Обновить HTML в поле textarea (это то поле, которое используется для отправки данных на сервер).
ed.save();
$('textarea[name="footer_content"]').trigger('change');
});
}
},1000);
})
А вот немного PHP для загрузки js:
function your_customize_backend_init(){
wp_enqueue_script('your_theme_customizer', get_template_directory_uri.'/customizer/customizer.js');
}
add_action( 'customize_controls_enqueue_scripts', 'your_customize_backend_init' );
Ответ или решение
Для решения проблемы изменения слага архивной страницы, которая уже занята, и для создания удобного интерфейса редактирования через административную панель WordPress, существуют несколько подходов. Давайте обсудим возможные варианты и определим наилучший.
1. Удаление архивной страницы
Один из способов — это полное удаление архивной страницы вашего настраиваемого типа поста. Тем не менее, этот вариант не всегда целесообразен, поскольку архивная страница предоставляет полезную функциональность для отображения всех постов определенного типа.
2. Изменение слага
Изменение слага архивной страницы с speakers
на что-то более уникальное, например, speaker
или presenter
, также является рабочим вариантом. Это абсолютно легитимный способ, который позволил бы вам установить слаг speakers
для ваших обычных страниц. Однако это может потребовать дополнительной настройки маршрутизации и не всегда является лучшим выбором для SEO.
3. Настройка редактируемого контента
Ваша идея об организации редактируемого контента через настройки темы или API настраиваемой панели (Customizer API) может оказаться наиболее гибким и клиентски-другим способом. Это позволит вам сохранить контент в параметрах темы и при этом предоставить простоту редактирования через интерфейс.
Реализация через настройки API
С помощью функции wp_editor
, вы можете создать WYSIWYG-редактор для управления содержимым.
Вот шаги, которые вы можете выполнить для реализации:
- Добавление настройки через Customize API:
add_action( 'customize_register', 'your_customizer' );
function your_customizer( $wp_customize ) {
$wp_customize->add_section(
'speakers_settings',
array(
'title' => __('Speakers Settings'),
'priority' => 120,
)
);
$wp_customize->add_setting('speakers_content', array(
'default' => 'Введите ваш текст здесь'
));
$wp_customize->add_control(new WP_Customize_Control($wp_customize, 'speakers_content', array(
'label' => 'Содержимое страницы Speakers',
'section' => 'speakers_settings',
'settings' => 'speakers_content',
'type' => 'textarea',
)));
}
- Создание редактора контента:
Для того чтобы усилить функциональность поля, вы можете использовать wp_editor
:
if(class_exists('WP_Customize_Control')){
class Example_Customize_Editor_Control extends WP_Customize_Control {
public $type = 'textarea';
public function render_content() {
?>
<label>
<span class="customize-control-title"><?php echo esc_html($this->label); ?></span>
<?php
$content = $this->value();
$editor_id = $this->id;
$settings = array('media_buttons' => true);
wp_editor($content, $editor_id, $settings);
?>
</label>
<?php
}
}
}
- Обновление предварительного просмотра:
Используйте JavaScript для обновления предварительного просмотра:
jQuery(document).ready(function($) {
$('textarea[name="speakers_content"]').attr('data-customize-setting-link','speakers_content');
setTimeout(function(){
var editor = tinyMCE.get('speakers_content');
if(editor) {
editor.onChange.add(function (ed, e) {
ed.save();
$('textarea[name="speakers_content"]').trigger('change');
});
}
}, 1000);
});
- Подключение вашего JavaScript:
Убедитесь, что ваш JavaScript правильно загружается в панели настроек:
function your_customize_backend_init(){
wp_enqueue_script('your_theme_customizer', get_template_directory_uri().'/customizer/customizer.js');
}
add_action( 'customize_controls_enqueue_scripts', 'your_customize_backend_init' );
Заключение
Выбор способа, как поступить с архивной страницей, должен основываться на конкретных потребностях вашего проекта. Рекомендую использовать метод с кастомизером, так как это обеспечит удобство для клиента и позволит легко управлять контентом. Переписывание слага или полное удаление может усложнить систему и негативно сказаться на SEO.
Такой подход будет удобным для пользователя, поскольку изменять контент можно будет из административной панели без необходимости редактирования PHP-кода.