Meskipun memiliki fitur pengaturan persisten di dalam inti itu bagus, mungkin butuh beberapa saat sebelum benar-benar diterima. WordPress 3.5 masih cukup jauh.
Jadi mari kita tambahkan $_REQUEST
array global saja.
add_action( 'load-edit.php', 'wpse34956_force_excerpt' );
function wpse34956_force_excerpt() {
$_REQUEST['mode'] = 'excerpt';
}
Ini akan mengunci mode, memaksa excerpt
mode sepanjang waktu, jadi mari kita biarkan pengguna memutuskan tetapi tetap menggunakan metadata pengguna:
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode', $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode', true ) )
$_REQUEST['mode'] = $mode;
}
Anda dapat menginterpolasi lebih lanjut post_type
ke semua dengan mempertimbangkan $_GET['post_type']
variabel saat tersedia.
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
// take into account post types that support excerpts
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if ( $post_type && !post_type_supports( $post_type, 'excerpt' ) )
return; // don't care
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, true ) )
$_REQUEST['mode'] = $mode;
}
Biola! Mode daftar persisten per jenis posting per pengguna, tidak ada retasan.
Layar tampilan posting beralih dari tampilan daftar ke tampilan kutipan berdasarkan nilai parameter "mode" dalam string kueri. Jika parameter "mode" tidak disetel, maka WordPress default ke tampilan daftar.
Sayangnya, parameter ini tidak dapat difilter, jadi tidak ada cara mudah untuk mengontrolnya secara terprogram.
Jadi saya akan melakukan sesuatu yang tidak pernah saya lakukan ... Saya akan memberi tahu Anda cara meretas Core untuk membuat ini berfungsi ...
Menambahkan filter
Buka
/wp-admin/includes/class-wp-posts-list-table.php
dan temukanprepare_items()
metodenya (sekitar baris 81).Pada baris 99, WordPress memeriksa untuk melihat apakah parameter "mode" disetel dalam permintaan dan menggunakannya untuk mengatur
$mode
variabel global :Kami akan mengubah baris ini untuk memfilter pengaturan default. Ubah baris ini ke:
Sekarang, masuk ke
functions.php
file tema Anda dan tambahkan kode berikut:Ini akan terhubung ke filter dan mengembalikan mode kutipan secara default.
Karena aturan pribadi saya tentang peretasan Core mengharuskan semua peretasan dikontribusikan kembali ke proyek (cara ini mereka dapat digulirkan ke dalam Core dan tidak lagi dihitung sebagai peretasan), saya telah membuka tiket Trac untuk peningkatan ini dan mengirimkan kode di atas sebagai tambalan. Silakan menimbang pada tiket sehingga bisa masuk ke inti untuk 3,5 (kita terlambat dalam siklus untuk 3,4, tetapi kita dapat mencoba untuk mendorong ini melalui untuk versi berikutnya).
sumber
$_REQUEST
globaladd_action( 'edit.php', ... )
dan sejenisnya, sementara kami menunggu inti untuk mengadopsi tambalan / proposal?$_REQUEST
objek sendiri. Jangan ragu untuk mengirim jawaban lain yang menguraikan bagaimana hal itu bisa dilakukan.Oke, tak lama setelah saya memberikan hadiah, saya datang dengan solusi berikut. Ini adalah perilaku default dalam segala hal, kecuali bahwa ia memilih tampilan kutipan untuk jenis posting apa pun yang Anda inginkan (bukan tampilan daftar default).
CATATAN: Saya merekomendasikan pendekatan Soulseekah, jika Anda tidak ingin mengingat pilihan pengguna, Anda dapat sedikit menggabungkan kode saya dengan kodenya. CATATAN 2: Jika / ketika tambalan EAMann adalah bagian dari inti, jelas metodenya akan menjadi yang terbaik karena itu tidak mengharuskan Anda untuk terus maju. Saya hanya tidak suka saat ini karena Anda harus mengedit file inti.
sumber
paged
tidak diperhitungkan (pagination) + menggunakanwp_redirect
bukan header mentah mungkin akan sedikit "bersih", dan saya tidak yakin seberapa efisien pengalihan. Selain itu terlihat menarik. Selain itu,$_GET['post_type']
mungkin tidak disetel, menghasilkan peringatan jika kesalahan diaktifkan. +1 untuk upaya dan kesabaran. Tidak menyadari pertanyaan itu sudah sangat tua.$_GET
variabel. Adapun$_GET['post_type']
, jujur, saya tidak terlalu peduli dengan itu karena saya hanya memerlukannya untuk jenis posting kustom, yang akan selalu ada. Jelas ini bisa dihilangkan. @ EAMann, Anda benar, namun, ini adalah solusi terbaik yang bisa saya dapatkan. Saya mencoba mengatur$_GET
parameter secara manual , berharap itu akan diset SEBELUM itu dibaca, tapi sepertinya tidak demikian.