it-swarm-id.com

Mengapa tidak ada fungsi global di wordpress untuk mengembalikan output dari panggilan fungsi apa pun?

Kami memiliki tag templat dan beberapa fungsi yang dimulai dengan get. Terkadang akan menyenangkan untuk melakukan hal-hal seperti:

$title = the_title();

untuk menggunakan html nanti. Ini hanya contoh sederhana, tentu saja ada beberapa fungsi seperti get_the_title (); Tapi itu hanya berfungsi untuk fungsi itu.

Saya bertanya-tanya mengapa tidak ada fungsi seperti ini:

function get_output() {
    $args     = func_get_args();
    $callback = array_shift($args);
    ob_start();
    call_user_func_array($callback, $args);
    return ob_get_clean();
}

Itu bisa mengubah fungsi apa pun yang memiliki output menjadi fungsi kembali:

$title = get_output('the_title');

Adakah ide mengapa hal itu tidak pernah dipikirkan? Setiap penulis tema atau peretas dapat memanfaatkannya, bukan?

3
hakre

Sebagai tanggapan langsung terhadap pertanyaan, WordPress tidak menyertakan fungsi untuk ini sebagian karena tidak secara khusus berlaku untuk fungsionalitas WordPress. Yaitu. ini masalah PHP (potensial), bukan WordPress.

Juga, saya tidak akan mengatakan itu tanggung jawab WordPress untuk memberikan solusi untuk plugin dll yang tidak menyediakan fungsi untuk mengembalikan data (yang bertentangan dengan gaya WordPress umum).

2
Joe Hoyle

Saya berpendapat bahwa get_posts adalah jawaban WP untuk permintaan Anda. Tag template telah dibuat untuk digunakan di Loop, tetapi cukup mudah untuk WP 'hacker' untuk menggunakan get_posts (), dan menetapkan, misalnya: $ post-> post_title ke variabel. Ini membuat frustasi pada awalnya, untuk berhenti mengandalkan The Loop, tetapi cukup mudah untuk bergerak melewati.

2
kevtrout

Karena mungkin lebih mudah untuk beberapa pengembang tema, Anda harus mengambilnya seperti itu dilakukan. Tetapi Anda dapat menulis fungsinya sendiri:

function get_output($function){
    return call_user_func('get_'.$function);
}

Menulis get_the_title () juga lebih pendek dari menulis get_output ('the_title') :)

1
2ndkauboy