Пример wp_update_post()... как обновить the_content в текстовой области?

7 июл. 2011 г., 04:28:15
Просмотры: 58.9K
Голосов: 12

Я использую функцию ниже для обновления мета-данных записи с фронтенда. Как лучше всего добавить текстовую область (textarea), которая обновляет the_content() используя wp_update_post()?

if ( isset( $_POST['albums'] ) && wp_verify_nonce($_POST['albums'],'update_albums_postmeta') ) 
    { //если проверка nonce успешна.
        global $post;
        $postid = $post->ID;
        $data = $_POST['priceone'];
              update_post_meta($postid,'_releasedate',$data);
        $data = $_POST['pricetwo'];
              update_post_meta($postid,'_amazonlink',$data);
    }

-

Редактирование:

Этот фрагмент отправляет изменения в базу данных, однако когда страница обновляется после отправки, показывается старый the_content(). Чтобы увидеть изменения, нужно вручную обновить запись.

Есть ли ошибки в моем коде?

if ( isset( $_POST['drw_inventory'] ) && wp_verify_nonce($_POST['drw_inventory'],'update_drw_postmeta') ) 
    { //если проверка nonce успешна.
        global $post;
        $data_content = $_POST['description'];

        $my_post = array();
        $my_post['ID'] = $post->ID;
        $my_post['post_content'] = $data_content;
        wp_update_post( $my_post );
    }
2
Комментарии

где вы используете этот код?

Hameedullah Khan Hameedullah Khan
7 июл. 2011 г. 08:56:03

в начале файла content-pt-album.php, где pt означает тип записи. Он сделан по образцу twentyeleven.

MTT MTT
7 июл. 2011 г. 16:11:53
Все ответы на вопрос 3
0

Вы можете переопределить свойства WP_Post и передать объект в wp_update_post:

/** @var WP_Post $post */
$post = get_post( 123 );

$post->post_content = "Другой контент";

wp_update_post( $post );

Мне кажется, что это проще, чем использовать массив.

7 апр. 2020 г. 08:21:39
1

У меня такая же проблема. Мой код находится в файле single.php. Я использую код из этой статьи: Фронтенд-редактирование постов с помощью формы

После нажатия на кнопку отправки, код в single.php действительно выполняет wp_update_post(), и ID поста возвращается. Поскольку это выполняется из файла шаблона, wp_query уже заполнен, поэтому страница всё ещё отображает старые данные поста. Если обновить страницу без отправки формы, новые данные загружаются.

Не уверен, что это лучшее решение, но оно работает. После выполнения wp_update_post() я перезаписываю глобальную переменную $wp_query, используя тот же запрос, который выполнялся до вызова этого файла шаблона.

global $wp_query;
if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['post_id']) && !empty($_POST['post_title']) && isset($_POST['update_post_nonce']) && isset($_POST['post_content'])) {
    $post_id = $_POST['post_id'];

    $post_type = get_post_type($post_id);
    $capability = ('page' == $post_type) ? 'edit_page' : 'edit_post';
    if (current_user_can($capability, $post_id) && wp_verify_nonce($_POST['update_post_nonce'], 'update_post_' . $post_id)) {
        $post = array(
            'ID' => esc_sql($post_id),
            'post_content' => wp_kses_post($_POST['post_content']),
            'post_title' => wp_strip_all_tags($_POST['post_title'])
        );
        $result = wp_update_post($post, true);

        if (is_wp_error($result)){
            wp_die('Пост не сохранён');
        }
        $wp_query = new WP_Query($wp_query->query);  // Сбрасывает глобальный запрос, чтобы обновлённые данные поста стали доступны.

    } else {
        wp_die("У вас нет прав на это действие");
    }
}

Я пробовал вызывать wp_reset_postdata() и wp_reset_query() вместо этого, но, предполагаю, они сбрасываются на кешированную копию, потому что старые данные поста всё равно остаются.

Другое рабочее решение — получение текущего URL с помощью:

global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request)); 

и затем после wp_update_post():

wp_redirect($current_url);

Код для $current_url был найден здесь.

27 сент. 2016 г. 22:17:56
Комментарии

Использование переменной $post, вероятно, является вашей проблемой.

Tim Hallman Tim Hallman
26 мар. 2020 г. 21:09:04
1

Это зависит от того, где вы используете этот код. Возвращает ли вам global $post именно ту запись, которую вы хотите обновить? Ваш код для обновления записи в WordPress выглядит правильным, но корректно ли работает условное выражение и возвращает ли $post->ID правильное числовое значение?

24 июл. 2011 г. 01:10:10
Комментарии

Да, $post и $post->ID выдают правильные результаты. :)

MTT MTT
24 июл. 2011 г. 15:47:02