Принуждение всех записей, связанных с пользовательским типом записи, быть закрытыми


Кто-нибудь знает способ добавить код в functions.php файл, который автоматически сделает все записи, относящиеся к пользовательскому типу записей, "закрытыми" и/или "защищенными паролем" с установленным паролем по умолчанию?

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

Author: NetConstructor.com, 2010-12-06

3 answers

Вы можете зацепиться за save_post, wp_insert_post или wp_insert_post_data для изменения объекта post до его вставки или сохранения.

С помощью save_post или wp_insert_post для обратного вызова потребуется объявить два аргумента и получить объект post в качестве второй входящей переменной.. (и я показываю вам, чтобы охватить альтернативы, пример Deadmedic был бы хорош для этого).

Для установки значений по умолчанию для определенного типа сообщений для новых сообщений вы можете использовать небольшой хак, подключившись к default_content (хотя default_title также сработало бы), как в примере, который я привел здесь.

Вам, по сути, нужны две функции: одна для изменения объектов post во время сохранения/вставки и одна для установки значений объектов post по умолчанию, вот пример двух необходимых функций (опять же, обратите внимание, что вы можете поменять мой обратный вызов save_post на пример, уже приведенный TheDeadMedic).

add_action( 'save_post', 'check_type_values', 10, 2 );

function check_type_values( $post_id, $post ) {

    if( $post->post_type )
        switch( $post->post_type ) {
            case 'my_custom_type':
                $post->post_status = 'private';
                $post->post_password = ( '' == $post->post_password ) ? 'some_default_when_no_password' : $post->post_password;
            break;
        }   
    return;
}

add_filter( 'default_content', 'set_default_values', 10, 2 );

function set_default_values( $post_content, $post ) {

    if( $post->post_type )
        switch( $post->post_type ) {
            case 'my_custom_type':
                $post->post_status = 'private';
                $post->post_password = 'some_default_password';
            break;
        }
    return $post_content;
}

Надеюсь, это поможет...

 6
Author: t31os, 2017-04-13 12:37:50
function force_type_private($post)
{
    if ($post['post_type'] != 'my_post_type' || $post['post_status'] == 'trash')
        return $post;

    $post['post_password'] = 'my password';
    $post['post_status'] = 'private';
    return $post;
}
add_filter('wp_insert_post_data', 'force_type_private');
 4
Author: TheDeadMedic, 2012-08-28 14:29:54

Не могли бы мы просто создать страницу шаблона для пользовательского типа записи и проверить, вошел ли пользователь в систему, и проверить, является ли пользователь определенной ролью? Давайте возьмем, например, вы хотите, чтобы у вас был тип записи, который должен просматриваться только администраторами:

<?php if ( is_user_logged_in() && is_admin() ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <?php the_content(); ?>
<?php endwhile; endif; endif; ?>
 0
Author: hdavis84, 2013-01-21 02:34:37