
fungsi – Bagaimana saya bisa memodifikasi atau memfilter variabel ini di kelas yang sudah ada? (Tema Mai)
Saya mencoba menggunakan fungsi post-grid yang ada untuk menampilkan posting lampiran tetapi $post_status
sulit dikodekan menjadi ‘terbitkan’ atau ‘pribadi’ sedangkan lampiran memiliki status inherit
. Saya menambahkan ‘mewarisi’ ke kode sumber mereka untuk memastikannya berfungsi tetapi saya mencoba untuk mencapainya tanpa memodifikasi sumbernya.
Ada beberapa lapisan metode di Kelas sebelum dirender jadi saya kesulitan mencari tahu bagaimana saya bisa memfilter $post_status
untuk ‘mewarisi’.
Inilah yang saya coba lakukan:
Ini bekerja ketika saya menggunakan $args
untuk apa pun kecuali lampiran.
function my_attachment_grid() {
$args = [
'post_type' => 'attachment',
'post_status' => 'inherit',
];
do_grid( 'post', $args );
}
Inilah yang saya kerjakan:
Inilah fungsinya (di luar Kelas). Jika saya var_dump($grid)
sebelum $grid->render()
saya dapat melihat semua $args default tetapi $query_args kosong. $post_status
tidak tercantum di sini.
function do_grid( $type, $args = [] ) {
$args = array_merge( [ 'type' => $type ], $args );
$grid = new Mai_Grid( $args );
$grid->render();
}
Kelas itu sendiri:
Memperhatikan get_post_query_args()
menyatakan $post_status
sebagai ‘terbitkan’, tetapkan ke $query_args
kemudian apply_filters()
. Tapi seperti yang disebutkan di atas, $query_args
dilindungi dan kosong di Objek baru.
Saya percaya saya harus bisa add_filter()
tapi saya tidak yakin apakah saya memanggilnya dengan benar atau bahkan mungkin karena itu dikodekan dengan keras di dalamnya dan tidak ditampilkan dalam args default.
class Grid {
// all protected
public function __construct( $args ) {
$args['context'] = 'block'; // Required for Mai_Entry.
$this->type = isset( $args['type'] ) ? $args['type'] : 'post';
$this->defaults = $this->get_defaults();
$this->args = $this->get_sanitized_args( $args );
$this->query_args = [];
}
public function render() {
$this->query = $this->get_query();
// ...
do_entries_open( $this->args ); // Open.
$this->do_grid_entries(); // Entries.
do_entries_close( $this->args ); // Close.
}
public function get_query() { // modify if post query or term query
$this->query_args = $this->get_post_query_args();
return $query;
}
public function get_post_query_args() {
$post_status="publish";
$query_args = [
'post_status' => $post_status,
//..
]
// ...
return apply_filters( 'post_grid_query_args', $query_args, $this->args );
}
}