( Примечание модераторов: заголовок изначально был «Как добавить селектор« Атрибуты страницы »и / или« Атрибуты страницы> Шаблон »в редактор POSTS»)
В настоящее время WP разрешает присваивать «шаблоны» только страницам (т post_type=='page'
. Е. ). Я бы хотел расширить эту функциональность и на посты (т post_type=='post'
. Е. )
Как добавить мета-поле «Атрибуты страницы» и, в частности, переключатель шаблонов в редактор сообщений?
Я предполагаю, что это код, который я добавлю в functions.php
мою тему.
ОБНОВЛЕНИЕ: мне удалось добавить выпадающее меню жестко запрограммированных шаблонов в мой редактор сообщений, просто добавив html окна выбора в существующее поле пользовательских мета-параметров. Вот код, который я использую для этого ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
А вот функция, которая записывает параметры и поле выбора шаблона ...
//adds the custom categories box
function post_categories_meta_box_modified() {
global $post;
if( get_post_meta($post->ID, '_noindex', true) ) $noindexChecked = " checked='checked'";
if( get_post_meta($post->ID, '_nofollow', true) ) $nofollowChecked = " checked='checked'";
?>
<div id="categories-all" class="ui-tabs-panel">
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
<li id='noIndex' class="popular-category"><label class="selectit"><input value="noIndex" type="checkbox" name="chk_noIndex" id="chk_noIndex"<?php echo $noindexChecked ?> /> noindex</label></li>
<li id='noFollow' class="popular-category"><label class="selectit"><input value="noFollow" type="checkbox" name="chk_noFollow" id="chk_noFollow"<?php echo $nofollowChecked ?> /> nofollow</label></li>
</ul>
<p><strong>Template</strong></p>
<label class="screen-reader-text" for="page_template">Post Template</label><select name="page_template" id="page_template">
<option value='default'>Default Template</option>
<option value='template-wide.php' >No Sidebar</option>
<option value='template-salespage.php' >Salespage</option>
</select>
</div>
<?php
}
И, наконец, код для захвата выбранных значений при сохранении ...
function save_post_categories_meta($post_id) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
$noIndex = $_POST['chk_noIndex'];
$noFollow = $_POST['chk_noFollow'];
update_post_meta( $post_id, '_noindex', $noIndex );
update_post_meta( $post_id, '_nofollow', $noFollow );
return $post_id;
}
Теперь я считаю, что осталось только (1) захватить выбранный шаблон и добавить его к мета поста для этого поста и (2) изменить index.php и single.php, чтобы он использовал выбранный шаблон.
источник
Ответы:
Ненавижу быть носителем плохих новостей, но WordPress жестко кодирует функциональность шаблона страницы в тип публикации "страница" , по крайней мере, в версии 3.0 (это может измениться в будущих версиях, но я не знаю какой-либо конкретной инициативы по ее изменению). пока что. Так что это один из немногих случаев, когда я пытаюсь понять, как обойти что-то без взлома ядра.)
Решение, которое я придумала, заключается в том, чтобы в основном скопировать соответствующий код из ядра WordPress и модифицировать его для наших нужд. Вот шаги (номера строк взяты из версии 3.0.1):
Скопируйте
page_attributes_meta_box()
функцию из строки 535/wp-admin/includes/meta-boxes.php
и измените ее в соответствии с требованиями.Кодекс
add_meta_boxes
хук, чтобы добавить метабокс, созданный в # 1.Скопируйте
get_page_templates()
функцию из строки 166/wp-admin/includes/theme.php
и измените ее в соответствии с требованиями.Скопируйте
page_template_dropdown()
функцию из строки 2550/wp-admin/includes/template.php
и измените ее в соответствии с требованиями.Добавьте шаблон сообщения в вашу тему.
Код
save_post
хук, чтобы включить сохранение имени файла шаблона поста при сохранении.Код
single_template
хук, чтобы разрешить загрузку шаблона сообщения для связанных сообщений.Теперь с этим!
1. Скопируйте
page_attributes_meta_box()
функциюВ качестве первого шага вам нужно скопировать
page_attributes_meta_box()
функцию из строки 535,/wp-admin/includes/meta-boxes.php
и я решил переименовать ееpost_template_meta_box()
. Поскольку вы запрашивали только шаблоны страниц, я пропустил код для указания родительского поста и для определения порядка, который делает код намного проще. Я также решил использовать postmeta для этого, а не пытаться повторно использоватьpage_template
свойство объекта, чтобы избежать и потенциальных несовместимостей, вызванных непреднамеренной связью. Итак, вот код:2. Код
add_meta_boxes
крючокСледующим шагом является добавление метабокса с помощью
add_meta_boxes
хука:3. Скопируйте
get_page_templates()
функциюЯ предположил, что будет иметь смысл только различать шаблоны страниц и шаблоны сообщений, таким образом, необходимость в
get_post_templates()
функции, основанной наget_page_templates()
строке 166/wp-admin/includes/theme.php
. Но вместо использованияTemplate Name:
маркера, какие шаблоны страниц используют эту функцию,Post Template:
вместо этого используется маркер, который вы можете увидеть ниже.Я также отфильтровываюсь осмотр
functions.php
(не знаю , какget_page_templates()
никогда правильно работали без этого, но что угодно!) И единственное , что осталось сделать ссылки изменения на словоpage
кpost
для обслуживания читаемости вниз по дороге:4. Скопируйте
page_template_dropdown()
функциюАналогично скопируйте
page_template_dropdown()
строку 2550/wp-admin/includes/template.php
для созданияpost_template_dropdown()
и просто измените ее на вызовget_post_templates()
вместо этого:5. Добавить шаблон сообщения
Следующим шагом является добавление шаблона сообщения для тестирования. Используя
Post Template:
маркер, упомянутый в шаге 3, скопируйтеsingle.php
из своей темыsingle-test.php
и добавьте следующий заголовок комментария ( обязательно измените что-то,single-test.php
чтобы вы могли сказать, что он загружается вместоsingle.php
) :После того, как вы сделали шаги с 1 по 5, вы можете увидеть, что ваше метабокс «Шаблоны сообщений» появится на странице вашего редактора сообщений:
(источник: mikeschinkel.com )
6. Код
save_post
крючкаТеперь, когда у вас есть редактор, вы должны сохранить имя файла шаблона страницы в postmeta, когда пользователь нажимает «Опубликовать». Вот код для этого:
7. Код
single_template
крючокИ, наконец, вам нужно заставить WordPress использовать ваши новые шаблоны сообщений. Вы делаете это, перехватывая
single_template
и возвращая желаемое имя шаблона для тех сообщений, которым назначен один:И это все!
Примечание , что я не принимать во внимание ТАМОЖЕННЫЙ ПОСТ типы , только
post_type=='post'
. По моему мнению, обращение к пользовательским типам постов потребовало бы разграничения между разными типами постов, и, хотя это было не слишком сложно, я не пытался сделать это здесь.источник
Wordpress позволяет добавлять Meta к категориям с помощью плагина:
Для этого вам нужно добавить одно из различных расширений, которое добавляет мета к категориям (имитируя, какие страницы выходят из коробки), Simple Term Meta прекрасно справляется со своей задачей.
NB WordPress 3.x необходим для расширения категорий.
После этого вы можете использовать:
Используйте Functions.php для добавления методов, чтобы делать то, что вы хотите, например
Называть новые поля в темах легко:
Более подробная информация и примеры: http://www.wphub.com/adding-metadata-taxonomy-terms/
источник