Bagaimana saya membuatnya sehingga halaman Tambahkan Posting Baru memiliki Visibilitas diatur ke Pribadi secara default?

8

Saya mencoba membuat plugin yang mengubah halaman Tambahkan Posting Baru sehingga bidang Visibilitas mengatakan "Pribadi" secara default:

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

[Publish]

... berbeda dengan apa yang biasanya diasumsikan oleh WordPress:

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

[Publish]

Saat ini, saya menggunakan filter "wp_insert_post_data", dan itu memungkinkan saya untuk mengubah posting apa pun dengan post_status dari "auto-draft" menjadi "private". Sementara ini berhasil, ada efek samping yang tidak diinginkan: Mengubah post_status menjadi "private" tampaknya menerbitkan posting secara otomatis, mengubah tombol di editor menjadi "Update". Selanjutnya, jika pengguna menyimpan sebelum menentukan judul, posting akan dipublikasikan dengan judul "Auto-Draft".

Apakah ada cara saya bisa mengubah Visibilitas ke Privat secara default, dengan cara yang tidak mempublikasikan posting secara otomatis, dan mengubah tombol menjadi "Perbarui"? Di vanilla WordPress, pengguna dapat secara manual mengubah visibilitas ke Private, dan tombolnya tetap seperti Publish ... Saya hanya perlu mencapainya melalui sebuah plugin. Saya juga ingin memastikan bahwa "publik" masih dapat dipilih oleh pengguna, jika mereka menginginkannya.

Terima kasih!

Matt Refghi
sumber

Jawaban:

-1

karena Anda sedang mengembangkan plug-in, saya menganggap Anda tidak ingin menyentuh file apa pun di luar wp-content / plugins atau ../tema dalam hal ini.

Namun, jika bukan itu masalahnya, ikuti bersama:
Buka wp-admin / include / meta-boxes.php dan temukan:

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

Sekarang ubah ke yang sudah jelas:

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

Sekali lagi, ini mempengaruhi file meta-boxes.php yang berada di luar folder plugins. Meskipun demikian, saya pikir pendekatan yang harus Anda ambil adalah membuat kotak meta baru, menambahkan pengaturan visibilitas khusus Anda (yaitu pribadi) dan membuat yang terakhir menimpa pengaturan visibilitas WP default .

Terbaik,
Chris

cr0z3r
sumber
2
Solusi yang mengharuskan Anda untuk memodifikasi file inti akan selalu dikuasai ketika Anda melakukan pembaruan. Karena itu mereka sebenarnya bukan solusi.
Drew Gourley
Setuju, tapi kecuali saya salah, saya percaya bagian dalam huruf tebal dapat dicapai melalui plugin biasa. Jika itu masalahnya, maka itu solusi yang layak, hanya sedikit lebih banyak pekerjaan daripada apa yang ingin saya lakukan.
Matt Refghi
3

dari plugin; menggunakan action 'post_submitbox_misc_actions' dan beberapa kueri untuk menangkap pengguna Menerbitkan formulir: 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' );

?>
kotak suara
sumber
Ini memecah konsep dan menerbitkan secara otomatis pos ketika Anda melakukan "Simpan Konsep". Ada solusi lain?
2

Cara yang benar untuk secara otomatis menandai posting sebagai pribadi adalah dengan melakukannya dengan filter wp_insert_post_data. Ini sangat mudah:

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
sumber
Ini benar, tetapi jika Anda ingin posting dapat dimasukkan ke tempat sampah, Anda harus memeriksa terlebih dahulu jika ('trash'! = $ Post ['post_status']).
alexg