Come posso farlo in modo che la pagina Aggiungi nuovo post abbia Visibilità impostata su Privato per impostazione predefinita?


8

Sto cercando di creare un plug-in che modifica la pagina Aggiungi nuovo post in modo che il campo Visibilità indichi "Privato" per impostazione predefinita:

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

[Publish]

... al contrario di quanto normalmente presuppone WordPress:

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

[Publish]

Al momento, sto usando il filtro "wp_insert_post_data" e questo mi sta permettendo di cambiare qualsiasi post con un post_status di "bozza automatica" in "privato". Mentre funziona, c'è un effetto collaterale non intenzionale: cambiare il post_status in "privato" sembra pubblicare il post automaticamente, cambiando il pulsante nell'editor in "Aggiorna". Inoltre, se l'utente salva prima di specificare un titolo, il post verrà pubblicato con il titolo "Bozza automatica".

Esiste un modo per modificare semplicemente Visibilità su Privato per impostazione predefinita, in modo da non pubblicare automaticamente il post e cambiare il pulsante in "Aggiorna"? In WordPress vanilla, gli utenti possono modificare manualmente la visibilità su Privato e il pulsante rimane come Pubblica ... Devo solo raggiungerlo tramite un plug-in. Voglio anche garantire che "pubblico" possa ancora essere selezionato dall'utente, qualora lo desiderasse.

Grazie!

Risposte:


-1

dato che stai sviluppando un plug-in, suppongo che tu non voglia toccare nessun file al di fuori di wp-content / plugins o ../themes per quella materia.

Tuttavia, se non è così, segui:
Vai a wp-admin / Includes / meta-box.php e trova:

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

Ora cambialo nell'ovvio:

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

Ancora una volta, questo influisce sul file meta-boxes.php che si trova all'esterno della cartella dei plugin. Tuttavia, penso che l'approccio che dovresti adottare sia la creazione di una nuova meta box, l'aggiunta della tua impostazione di visibilità personalizzata (cioè privata) e che quest'ultima abbia la precedenza sull'impostazione di visibilità WP predefinita .

Meglio,
Chris


2
Le soluzioni che richiedono di modificare i file core verranno sempre aggiornate quando si esegue un aggiornamento. Quindi non sono davvero soluzioni.
Ha disegnato Gourley il

D'accordo, ma se non sbaglio, credo che la parte in grassetto sia realizzabile tramite un normale plugin. Se è così, allora è una soluzione decente, solo un po 'più di lavoro di quello che volevo fare.
Matt Refghi,

3

dal plugin; utilizza l'azione 'post_submitbox_misc_actions' e alcune query per catturare l'utente Pubblica modulo: 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' );

?>

Ciò interrompe le bozze e pubblica automaticamente i post quando fai "Salva bozza". Qualche altra soluzione?

2

Il modo corretto di contrassegnare automaticamente un post come privato è farlo con il filtro wp_insert_post_data. È molto semplice:

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;
}

Questo è corretto, ma se vuoi che il post possa essere messo nel cestino, dovresti prima controllare se ('trash'! = $ Post ['post_status']).
alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.