# wp_write_post()

URL: https://chugunov.pro/api-wordpress/functions/wp_write_post/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.1.0.

## Сигнатура

```php
wp_write_post(): int|WP_Error
```

## Описание

Создаёт новую запись из формы «Написать запись», используя информацию из `$_POST`.

## Возвращаемое значение

`int|WP_Error` — WP_Error

## Исходный код

Файл: `wp-admin/includes/post.php:911`

```php
function wp_write_post() {
	if ( isset( $_POST['post_type'] ) ) {
		$ptype = get_post_type_object( $_POST['post_type'] );
	} else {
		$ptype = get_post_type_object( 'post' );
	}

	if ( ! current_user_can( $ptype->cap->edit_posts ) ) {
		if ( 'page' === $ptype->name ) {
			return new WP_Error( 'edit_pages', __( 'Sorry, you are not allowed to create pages on this site.' ) );
		} else {
			return new WP_Error( 'edit_posts', __( 'Sorry, you are not allowed to create posts or drafts on this site.' ) );
		}
	}

	$_POST['post_mime_type'] = '';

	// Clear out any data in internal vars.
	unset( $_POST['filter'] );

	// Edit, don't write, if we have a post ID.
	if ( isset( $_POST['post_ID'] ) ) {
		return edit_post();
	}

	if ( isset( $_POST['visibility'] ) ) {
		switch ( $_POST['visibility'] ) {
			case 'public':
				$_POST['post_password'] = '';
				break;
			case 'password':
				unset( $_POST['sticky'] );
				break;
			case 'private':
				$_POST['post_status']   = 'private';
				$_POST['post_password'] = '';
				unset( $_POST['sticky'] );
				break;
		}
	}

	$translated = _wp_translate_postdata( false );
	if ( is_wp_error( $translated ) ) {
		return $translated;
	}
	$translated = _wp_get_allowed_postdata( $translated );

	// Create the post.
	$post_id = wp_insert_post( $translated );
	if ( is_wp_error( $post_id ) ) {
		return $post_id;
	}

	if ( empty( $post_id ) ) {
		return 0;
	}

	add_meta( $post_id );

	add_post_meta( $post_id, '_edit_last', $GLOBALS['current_user']->ID );

	// Now that we have an ID we can fix any attachment anchor hrefs.
	_fix_attachment_links( $post_id );

	wp_set_post_lock( $post_id );

	return $post_id;
}
```

## История изменений

- 2.1.0 — Introduced.

## Связанные

Использует: [`_wp_get_allowed_postdata`](https://chugunov.pro/api-wordpress/functions/_wp_get_allowed_postdata/), [`wp_set_post_lock`](https://chugunov.pro/api-wordpress/functions/wp_set_post_lock/), [`add_meta`](https://chugunov.pro/api-wordpress/functions/add_meta/), [`_fix_attachment_links`](https://chugunov.pro/api-wordpress/functions/_fix_attachment_links/), [`edit_post`](https://chugunov.pro/api-wordpress/functions/edit_post/), [`_wp_translate_postdata`](https://chugunov.pro/api-wordpress/functions/_wp_translate_postdata/), [`wp_insert_post`](https://chugunov.pro/api-wordpress/functions/wp_insert_post/), [`add_post_meta`](https://chugunov.pro/api-wordpress/functions/add_post_meta/), [`current_user_can`](https://chugunov.pro/api-wordpress/functions/current_user_can/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`get_post_type_object`](https://chugunov.pro/api-wordpress/functions/get_post_type_object/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/), `WP_Error::__construct`.
Используется в: [`write_post`](https://chugunov.pro/api-wordpress/functions/write_post/), [`wp_write_post`](https://chugunov.pro/api-wordpress/functions/wp_write_post/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_write_post/
