wordpress — вручную установите автора поста на php

#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 этим сообщениям независимо от того, что они вводят в поле. Не видя пользовательской функции или не зная, какую тему вы используете для тестирования, будет довольно сложно устранить неполадки.