Как добавить изображение записи для категории (без плагина)?
Я нахожу плагины, которые добавляют возможность установки изображений записи для категорий, но не нахожу как реализовать это программным путем.

Я упустил из виду, что можно легко добавлять поля к терминам таксономии с помощью Advanced Custom Fields: https://www.advancedcustomfields.com/resources/get-values-from-a-taxonomy-term/

Не всему нужен плагин.
Если вам нужно добавить простое поле для ввода URL изображения, используйте функции WordPress add_term_meta(), update_term_meta() и get_term_meta().
function addTitleFieldToCat(){
$cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_page_title"><?php _e('Заголовок страницы категории'); ?></label></th>
<td>
<input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
<span class="description"><?php _e('Заголовок для категории'); ?></span>
</td>
</tr>
<?php
}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');
function saveCategoryFields() {
if ( isset( $_POST['cat_title'] ) ) {
update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
}
}
add_action ( 'edited_category', 'saveCategoryFields');
источник: ответ Luke Simmons из: Добавить пользовательское поле к категории

Уже существуют некоторые решения для добавления пользовательских полей к таксономиям. Смотрите: Добавление пользовательского поля к категории
Внизу вы найдёте обновление за 2016 год, которое должно вам помочь.
С этим решением вы можете просто скопировать URL изображения после загрузки в Медиабиблиотеку, но я предполагаю, что вы хотите использовать модальное окно загрузки медиафайлов (всплывающее окно) с использованием wp.media, верно? Вам нужно будет реализовать это с помощью JavaScript. В этом посте объясняются несколько способов инициализации модального окна загрузки медиафайлов: https://mikejolley.com/2012/12/21/using-the-new-wordpress-3-5-media-uploader-in-plugins/

<?php
add_action ( 'category_edit_form_fields', 'addTitleFieldToCat', 10, 2 );
function addTitleFieldToCat( $tag, $taxonomy ) {
$cat_title = get_term_meta( $tag->term_id, '_pagetitle', true );
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_page_title"><?php _e('Заголовок страницы категории'); ?></label></th>
<td>
<input type="text" name="cat_title" id="cat_page_title" value="<?php echo $cat_title ?>"><br />
<p class="description"><?php _e('Заголовок для категории'); ?></p>
</td>
</tr>
<?php
}
add_action ( 'edited_category', 'saveCategoryFields' );
function saveCategoryFields() {
if ( isset( $_POST['cat_title'] ) ) {
update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
}
}
Модификации кода предложены пользователем @talk-nerdy-to-me - https://wordpress.stackexchange.com/users/122776/talk-nerdy-to-me
