Как настроить видимость настраиваемого типа записи WordPress на частную после редактирования? - PullRequest
0 голосов
/ 25 марта 2019

Я создал собственный тип записи с плагином.Зарегистрированный пользователь может вставить новое сообщение из внешнего интерфейса, и оно будет сохранено как черновик.Когда я редактирую его в бэк-энде, мне нужно, чтобы он сохранялся с приватной видимостью.Я нашел этот фрагмент для установки видимости по умолчанию:

public function force_dpa_request_private( $data , $postarr ) {

    if( empty( $data['post_name'] ) && 'my-cpt' == $postarr['post_type'] )
        $data[ 'post_status' ] = 'private';

    return $data;

}

, но он работает только при первой вставке, когда я редактирую его, видимость меняется на общедоступную ...

1 Ответ

0 голосов
/ 25 марта 2019

Вы можете подключиться к save_post, который вызывается после создания или обновления сообщения.

 <?php

    add_action( 'save_post', 'callback_save_post', 10, 3);
    function callback_save_post( $post_ID, $post, $update ){
        if ( 'my-cpt' === get_post_type( $post_ID) && ! wp_is_post_revision( $post_ID ) ) {
            // unhook this function so it doesn't loop infinitely
            remove_action('save_post', 'callback_save_post', 10 );

            // Make the post private if it is edited else make it draft.
            if ( $update ) {
                $postarr = array(
                    'ID' => $post_ID,
                    'post_status' => 'private'
                );
            } else {
                $postarr = array(
                    'ID' => $post_ID,
                    'post_status' => 'draft'
                );
            }

            // Update the post.
            wp_update_post( $postarr );

            // re-hook this function.
            add_action( 'save_post', 'callback_save_post', 10, 3);
        }
    }

Ссылка:

https://developer.wordpress.org/reference/hooks/save_post/

https://codex.wordpress.org/Function_Reference/wp_update_post

...