Как сделать так, чтобы на странице «Добавить новое сообщение» по умолчанию было установлено значение «Видимость»?

8

Я пытаюсь создать плагин, который изменяет страницу «Добавить новое сообщение», поэтому в поле «Видимость» по умолчанию указано «Приватное»:

Status: Draft
Visibility: **Private**
Publish immediately

[Publish]

... в отличие от того, что WordPress обычно предполагает:

Status: Draft
Visibility: **Public**
Publish immediately

[Publish]

В настоящее время я использую фильтр "wp_insert_post_data", и это позволяет мне изменять любые сообщения с post_status "auto-draft" на "private". Хотя это работает, есть непреднамеренный побочный эффект: изменение post_status на «private», по-видимому, автоматически публикует сообщение, изменяя кнопку в редакторе на «Update». Кроме того, если пользователь сохранит данные перед тем, как указать заголовок, публикация будет опубликована с заголовком «Авто-черновик».

Можно ли как-то просто изменить Visibility на Private по умолчанию, чтобы не публиковать публикацию автоматически, и изменить кнопку на «Обновить»? В ванильном WordPress пользователи могут вручную изменить видимость на Приватный, и кнопка остается как Публикация ... Мне просто нужно добиться этого с помощью плагина. Я также хочу убедиться, что пользователь может выбрать «public», если он того пожелает.

Спасибо!

Мэтт Рефги
источник

Ответы:

-1

так как вы разрабатываете плагин, я предполагаю, что вы не хотите трогать какие-либо файлы, кроме wp-content / plugins или ../themes.

Однако, если это не так, следуйте
инструкциям : Перейдите в wp-admin / includes / meta-boxes.php и найдите:

$visibility = 'public';
$visibility_trans = __('Public');

Теперь измените это на очевидное:

$visibility = 'private';
$visibility_trans = __('Private');

Опять же, это влияет на файл meta-boxes.php, который находится за пределами папки плагинов. Тем не менее, я думаю, что подход, который вы должны использовать, - это создание нового мета-блока, добавление вашего пользовательского параметра видимости (т.е. частного) и изменение последнего в настройке видимости WP по умолчанию .

Лучший,
Крис

cr0z3r
источник
2
Решения, требующие изменения основных файлов, всегда будут обновляться при обновлении. Поэтому они действительно не являются решениями.
Дрю Гурли
Согласен, но, если я не ошибаюсь, я считаю, что выделение жирным шрифтом возможно с помощью обычного плагина. Если это так, то это достойное решение, просто немного больше работы, чем я хотел сделать.
Мэтт Рефхи
3

из плагина; использует действие 'post_submitbox_misc_actions' и некоторый запрос, чтобы поймать пользовательскую форму публикации: http://wordpress.org/extend/plugins/private-post-by-default/

function default_post_visibility(){
global $post;

if ( 'publish' == $post->post_status ) {
    $visibility = 'public';
    $visibility_trans = __('Public');
} elseif ( !empty( $post->post_password ) ) {
    $visibility = 'password';
    $visibility_trans = __('Password protected');
} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) {
    $visibility = 'public';
    $visibility_trans = __('Public, Sticky');
} else {
    $post->post_password = '';
    $visibility = 'private';
    $visibility_trans = __('Private');
} ?>

<script type="text/javascript">
    (function($){
        try {
            $('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
            $('#hidden-post-visibility').val('<?php echo $visibility; ?>');
            $('#visibility-radio-<?php echo $visibility; ?>').attr('checked', true);
        } catch(err){}
    }) (jQuery);
</script>
<?php
}

add_action( 'post_submitbox_misc_actions' , 'default_post_visibility' );

?>
hearvox
источник
Это нарушает черновики и автоматически публикует сообщения, когда вы делаете «Сохранить черновик». Любые другие решения?
2

Правильный способ автоматически пометить сообщение как личное - это сделать с помощью фильтра wp_insert_post_data. Это очень просто:

add_filter( 'wp_insert_post_data', 'mark_post_private' );
function mark_post_private( $data ) {
    if ( 'your_post_type_goes_here' == $data['post_type'] ) {
        $data['post_status'] = 'private';
    }

    return $data;
}
Ярон
источник
Это правильно, но если вы хотите, чтобы публикация могла быть помещена в корзину, вы должны сначала проверить, если ('trash'! = $ Post ['post_status']).
alexg