Como posso fazer com que a página Adicionar nova postagem tenha Visibilidade definida como Privada por padrão?

8

Estou tentando criar um plug-in que altera a página Adicionar nova postagem, para que o campo Visibilidade diga "Privado" por padrão:

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

[Publish]

... ao contrário do que o WordPress normalmente assume:

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

[Publish]

No momento, estou usando o filtro "wp_insert_post_data" e isso permite alterar qualquer postagem com um post_status de "auto-draft" para "private". Enquanto isso funciona, há um efeito colateral não intencional: alterar o post_status para "private" parece publicar a postagem automaticamente, alterando o botão no editor para "Update". Além disso, se o usuário salvar antes de especificar um título, a postagem será publicada com o título "Rascunho automático".

Existe alguma maneira de simplesmente mudar Visibilidade para Privado por padrão, de uma maneira que não publique automaticamente a postagem, e mude o botão para "Atualizar"? No baunilha WordPress, os usuários podem alterar manualmente a visibilidade para Privado, e o botão permanece como Publicar ... Eu só preciso conseguir isso através de um plugin. Eu também quero garantir que "público" ainda possa ser selecionado pelo usuário, caso ele deseje.

Obrigado!

Matt Refghi
fonte

Respostas:

-1

desde que você esteja desenvolvendo um plug-in, presumo que você não queira tocar em nenhum arquivo fora do wp-content / plugins ou ../themes.

No entanto, se esse não for o caso, siga o
procedimento : Vá para wp-admin / includes / meta-boxes.php e encontre:

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

Agora mude para o óbvio:

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

Novamente, isso afeta o arquivo meta-boxes.php que está fora da pasta de plugins. No entanto, acho que a abordagem que você deve adotar é criar uma nova meta box, adicionar sua configuração de visibilidade personalizada (ou seja, privada) e fazer com que a última substitua a configuração de visibilidade padrão do WP .

Best,
Chris

cr0z3r
fonte
2
As soluções que exigem que você modifique os arquivos principais sempre serão sobrecarregadas quando você fizer uma atualização. Portanto, eles realmente não são soluções.
Desenhou Gourley
Concordo, mas, a menos que eu esteja enganado, acredito que a parte em negrito é possível de obter por meio de um plugin comum. Se for esse o caso, é uma solução decente, apenas um pouco mais de trabalho do que o que eu queria fazer.
precisa saber é o seguinte
3

do plugin; usa a ação 'post_submitbox_misc_actions' e alguma consulta para capturar o formulário de publicação do usuário: 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
fonte
Isso interrompe os rascunhos e publica automaticamente as postagens quando você "Salvar rascunho". Alguma outra solução?
2

A maneira correta de marcar automaticamente uma postagem como privada é fazê-lo com o filtro wp_insert_post_data. É muito simples:

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;
}
Yaron
fonte
Isso está correto, mas se você quiser que a postagem possa ser colocada no lixo, verifique primeiro se ('lixo'! = $ Post ['post_status']).
alexg 13/12/19