Как я могу установить пост -автора пост, который я только что создал с помощью PHP?
-
22-10-2019 - |
Вопрос
Я использую PHP для динамического создания пользовательского поста, и мне нужен автор, чтобы быть кем -то, кроме зарегистрированного пользователя. я нашел это https://stackoverflow.com/questions/5759359/wordpress-menly-set-the-author-of-post-in-php Но мне интересно, есть ли способ сделать это после того, как пост уже вставлен. Думаю, я мог бы просто сделать запрос DB ...
Решение
Если вы знаете идентификатор автора, вы можете использовать WP_INSERT_POST, указывающий на него идентификатор и идентификатор автора.
$id = $post->ID; // change this to whathever
$user_id = '4'; // change this too
$the_post = array();
$the_post['ID'] = $id;
$the_post['post_author'] = $user_id;
wp_insert_post( $the_post );
Хитрость состоит в том, чтобы указать идентификатор для обновления сообщения. Видеть wp_insert_post()
.
Другие советы
Для простоты и актуальности между этим вопросом и другим вопросом, заданным на Переполнение стека (WordPress - вручную установить автора сообщения в PHP - как связано OP здесь, на WPSE.).
WordPress, кажется, заставляет ценность для post_author
во время вставки или обновления сообщений с использованием wp_insert_post()
а также wp_update_post()
.
Путь обойти это использование крючка фильтра wp_insert_post_data
.
/**
* Filter slashed post data just before it is inserted into the database.
*
* @since 2.7.0
*
* @param array $data An array of slashed post data.
* @param array $postarr An array of sanitized, but otherwise unmodified post data.
*/
$data = apply_filters( 'wp_insert_post_data', $data, $postarr );
Пример использования фильтра wp_insert_post_data
:
function remove_author_id( $data, $postarr ) {
if ( $data['post_type'] != 'YOUR-POST-TYPE-HERE' ) {
return $data;
}
$data['post_author'] = 0;
return $data;
}
add_filter( 'wp_insert_post_data', 'remove_author_id', '99', 2 );
Это может быть особенно приятно для вставки или обновления сообщений, используя PHP
.
Примечание: Вы захотите отключить поддержку author
В вашем пользовательском типе поста и, вероятно, будьте осторожны, используя любые функции, связанные с автором, в рамках этого типа пост.
Если это пользовательский тип поста, и вам не нужно, чтобы автор был назначен на пост, вы можете удалить «автора» из supports( array )
в Register_post_type. http://codex.wordpress.org/function_reference/register_post_type
Если вам по-прежнему нужна автора поддержки вашего типа поста, это было бы гораздо больше смысла сделать это в post.php / post-new.php, отфильтровав автора Metabox.
Решение состоит в том, чтобы добавить нет или нулевого пользователя в выпадающую сторону с помощью wp_dropdown_users 'show_option_none'
WordPress будет использовать <option value="-1">
Для вашего нулевого пользователя, но он будет отображаться как 0 в БД.
*Примечание. Этот пример также перемещает автора Div прямо над кнопкой публикации.
add_action( 'post_submitbox_misc_actions', 'move_author_meta' );
function move_author_meta() {
global $post_ID;
$post = get_post( $post_ID );
echo '<div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">Author: ';
better_author_meta_box( $post ); //This function is being called in replace author_meta_box()
echo '</div>';
}
function better_author_meta_box($post) { ?>
<label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>
<?php
if ( 'auto-draft' == $post->post_status ) : $selected = false; elseif ( $post->post_author == 0 || ( ! $post->post_author) ) : $selected = -1; else : $selected = $post->post_author; endif;
wp_dropdown_users( array(
'who' => 'authors',
'name' => 'post_author_override',
'selected' => $selected ? $selected : (int) -1,
'include_selected' => true,
'show_option_none' => 'NONE',
'orderby' => 'display_name',
'show' => 'display_name',
'order' => 'ASC'
) );
}
Я уверен, что вы замечаете все дополнительные условные чеки на выбранные $. Это может быть излишним, но устраняет любые проблемы с редакторами, которые не могут изменить автора на то, что они не из предыдущих опубликованных сообщений.