Принуждение всех записей, связанных с пользовательским типом записи, быть закрытыми
Кто-нибудь знает способ добавить код в functions.php файл, который автоматически сделает все записи, относящиеся к пользовательскому типу записей, "закрытыми" и/или "защищенными паролем" с установленным паролем по умолчанию?
Я конкретно имею в виду создание нового сообщения или редактирование существующего сообщения, таким образом гарантируя, что сообщение, принадлежащее определенному пользовательскому типу сообщения, никогда не изменится...
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;
}
Надеюсь, это поможет...
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');
Не могли бы мы просто создать страницу шаблона для пользовательского типа записи и проверить, вошел ли пользователь в систему, и проверить, является ли пользователь определенной ролью? Давайте возьмем, например, вы хотите, чтобы у вас был тип записи, который должен просматриваться только администраторами:
<?php if ( is_user_logged_in() && is_admin() ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; endif; ?>