Как изменить порядок пользовательских полей формы
Я добавил поле "Пользовательский заголовок" в редактор категорий, чтобы сохранять SEO-оптимизированный заголовок, который можно использовать отдельно от названия категории. Поле работает отлично, но отображается последним элементом на экране редактирования категории. В идеале, я хотел бы разместить его под полем "Название" (или хотя бы вверху). Возможно ли это?
Вот код, который я использую для добавления своего поля в форму редактирования категории...
if($pagenow == "edit-tags.php" && $_REQUEST['action'] == "edit")
add_filter('edit_category_form', 'my_category_fields');
function my_category_fields($tag) {
$tag_extra_fields = get_option(MY_CATEGORY_FIELDS);?>
<table class="form-table">
<tr class="form-field">
<th scope="row" valign="top"><label for="categoryTitle">Полный заголовок категории</label></th>
<td><input name="categoryTitle" id="categoryTitle" type="text" size="40" aria-required="false" value="<?php echo $tag_extra_fields[$tag->term_id]['cat_title']; ?>" />
<p class="description">Заголовок необязателен, но будет использоваться вместо названия на странице категории.</p></td>
</tr>
</table>
<?php
}
WordPress не предоставляет нужных хуков, но если вы готовы использовать буферизацию вывода PHP и функцию preg_replace(), вы можете заставить это работать без модификации ядра. Вот ответ, в котором обсуждается необходимая общая техника:
Хуки, которые вам понадобятся: 'category_pre_add_form' для ob_start() и 'category_add_form' для ob_get_clean().
Это интересный вариант, Майк. Также это должно устранить проблему мерцания, присущую варианту с javascript. Как всегда, спасибо!
Scott B
@Scott B - Да, я всегда предпочитаю делать на PHP, когда это возможно. Я люблю использовать jQuery для интерактивности, а не как костыль для менее чем идеальной генерации HTML, потому что, как вы упомянули, это намного чище.
MikeSchinkel
Не существует решения на основе PHP без взлома ядра. Если вы откроете файл wp-admin/edt-tag-form.php, то увидите это. Хук, который вы используете, срабатывает прямо перед кнопкой отправки, а остальная часть формы жестко закодирована.
Но, вероятно, это можно сделать с помощью jQuery. Прочитайте мой ответ на похожий вопрос для примера. Пример приведен для экрана редактирования записи, но концепция должна быть той же — используйте метод jQuery insertBefore() для перемещения элемента (по ID) перед другим элементом (по ID).
Мне нравится ваша идея с использованием jQuery. Но кажется, я застрял, так как поля редактирования категорий (элементы TR) не имеют назначенных ID, которые я мог бы использовать с jQuery.
Scott B