Ошибка PHP: string-string?
Потому что вы из одной строки пытаетесь вычесть другую.
Ну это примерно как "кузябрики - быбрики = ?" фиг знает какой результат толжен быть.
Можно преобразовать строку в timestamp и оперировать числами.
Еще лучше использовать специальную штуку: DateTime::diff
функция содержит несколько ошибок:

Переменная $now содержит только сегодняшнюю дату в формате Y-m-d, а не объект DateTime, который можно использовать для вычисления разницы между датами. Чтобы получить объект DateTime, нужно использовать функцию new DateTime().

Переменная $date содержит строку с датой рождения, которую нужно преобразовать в объект DateTime, прежде чем можно вычислить разницу между датами.

Переменная $datediff содержит результат вычитания двух объектов DateTime, которое возвращает объект DateInterval, а не целочисленное значение разницы в днях между датами.

При выводе значения переменной $datediff в атрибуте value у элемента input используется не тот формат, который требуется для отображения возраста в годах.

вот исправленный код:

$now = new DateTime();
$nothing = '';
$date_str = get_the_author_meta( '_birthday', $user_id ); // получаем дату рождения как строку
if ( empty( $date_str ) ) {
    $age_str = $nothing; // если дата рождения не указана, возвращаем пустую строку
} else {
    $date = new DateTime( $date_str ); // преобразуем дату рождения в объект DateTime
    $diff = $now->diff( $date ); // вычисляем разницу между датами
    $age_str = $diff->y; // получаем количество полных лет
}
?>
<input type="text" name="_age" id="_age" placeholder="Возраст" value="<?php echo $age_str; ?>">