Как изменить порядок пользовательских полей формы
Я добавил поле "Пользовательский заголовок" в редактор категорий, чтобы сохранять 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 - Да, я всегда предпочитаю делать на PHP, когда это возможно. Я люблю использовать jQuery для интерактивности, а не как костыль для менее чем идеальной генерации HTML, потому что, как вы упомянули, это намного чище.

Не существует решения на основе PHP без взлома ядра. Если вы откроете файл wp-admin/edt-tag-form.php
, то увидите это. Хук, который вы используете, срабатывает прямо перед кнопкой отправки, а остальная часть формы жестко закодирована.
Но, вероятно, это можно сделать с помощью jQuery. Прочитайте мой ответ на похожий вопрос для примера. Пример приведен для экрана редактирования записи, но концепция должна быть той же — используйте метод jQuery insertBefore()
для перемещения элемента (по ID) перед другим элементом (по ID).

Мне нравится ваша идея с использованием jQuery. Но кажется, я застрял, так как поля редактирования категорий (элементы TR) не имеют назначенных ID, которые я мог бы использовать с jQuery.
