#php #wordpress
#php #wordpress
Вопрос:
Я использую тему WordPress, которая позволяет пользователям создавать сообщения (им не нужно входить в систему). Проблема в том, что при отображении сообщений <?php the_author(); ?>
всегда отображается как «администратор». В форме после создания есть поле имени, которое я могу получить в functions.php но как я могу вручную изменить автора поста на имя, которое было введено в поле формы?
Ответ №1:
Не видя контекста, я могу предложить только шаг в правильном направлении. В плагине или functions.php в вашей теме вы можете вызвать wp_insert_post_data
фильтр, чтобы изменить данные, которые будут вставлены в качестве вашего поста. Например, если вы хотите, чтобы каждое сообщение было приписано автору с идентификатором 5, вы могли бы сделать что-то вроде:
function my_change_author( $data , $postarr )
{
$data['post_author'] = 5;
return $data;
}
add_filter('wp_insert_post_data' , 'my_change_author' , '99', 2);
Я делал что-то подобное раньше, когда у меня были интерфейсные формы, которые я записывал как сообщения и автоматически назначал предопределенному автору, которого я называю Web Monkey или что-то в этом роде 😉 Проверьте эту страницу для получения дополнительной информации: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data. Этот фильтр действительно мощный, поскольку вы можете изменять свои данные, которые в любом случае станут вашим постом, до того, как они попадут в базу данных.
Комментарии:
1. спасибо, это было полезно. кажется, вы не можете установить автора сообщения с помощью wp_insert_post(), потому что это жестко запрограммировано для текущего идентификатора пользователя
2. Умная идея, учитывая, что WordPress принудительно вводит запись здесь. Вы можете переопределить его с помощью этого фильтра (
wp_insert_post_data
). Это особенно удобно, если выinserting
илиupdating
используетеPHP
сообщения. Также неплохо проверить тип записи в этом хукле, чтобы вы не переопределяли идентификатор автора для каждой записи во ВСЕХ типах записей.
Ответ №2:
Вы проверили, что содержит the_author_meta()? WP должен прикреплять идентификатор пользователя к каждому сообщению, поэтому, скорее всего, он присваивает user 1 этим сообщениям независимо от того, что они вводят в поле. Не видя пользовательской функции или не зная, какую тему вы используете для тестирования, будет довольно сложно устранить неполадки.