Jika Anda sampai pada titik di mana kode dalam tema Anda functions.php
mulai membanjiri Anda, saya pasti akan mengatakan Anda siap mempertimbangkan untuk memecahnya menjadi beberapa file. Saya cenderung melakukan itu hampir berdasarkan sifat kedua pada saat ini.
Gunakan Sertakan File di Tema Anda functions.php
Berkas
Saya membuat subdirektori yang disebut "include" di bawah direktori tema saya dan mengelompokkan kode saya ke dalam termasuk file yang dikelola oleh apa yang masuk akal bagi saya pada saat itu (yang berarti saya terus-menerus melakukan refactoring dan memindahkan kode ketika situs berevolusi.) Saya juga jarang masukkan kode nyata functions.php
; semuanya berjalan di file include; hanya preferensi saya.
Sekedar memberi Anda contoh, inilah pengujian yang saya gunakan untuk menguji jawaban atas pertanyaan saya di sini di WordPress Answers. Setiap kali saya menjawab pertanyaan saya menyimpan kode di sekitar kalau-kalau saya membutuhkannya lagi. Ini bukan apa yang akan Anda lakukan untuk situs langsung tetapi ini menunjukkan mekanisme pemisahan kode:
<?php
/*
* functions.php
*
*/
require_once( __DIR__ . '/includes/null-meta-compare.php');
require_once( __DIR__ . '/includes/older-examples.php');
require_once( __DIR__ . '/includes/wp-admin-menu-classes.php');
require_once( __DIR__ . '/includes/admin-menu-function-examples.php');
// WA: Adding a Taxonomy Filter to Admin List for a Custom Post Type?
// http://wordpress.stackexchange.com/questions/578/
require_once( __DIR__ . '/includes/cpt-filtering-in-admin.php');
require_once( __DIR__ . '/includes/category-fields.php');
require_once( __DIR__ . '/includes/post-list-shortcode.php');
require_once( __DIR__ . '/includes/car-type-urls.php');
require_once( __DIR__ . '/includes/buffer-all.php');
require_once( __DIR__ . '/includes/get-page-selector.php');
// http://wordpress.stackexchange.com/questions/907/
require_once( __DIR__ . '/includes/top-5-posts-per-category.php');
// http://wordpress.stackexchange.com/questions/951/
require_once( __DIR__ . '/includes/alternate-category-metabox.php');
// http://lists.automattic.com/pipermail/wp-hackers/2010-August/034384.html
require_once( __DIR__ . '/includes/remove-status.php');
// http://wordpress.stackexchange.com/questions/1027/removing-the-your-backup-folder-might-be-visible-to-the-public-message-generate
require_once( __DIR__ . '/includes/301-redirects.php');
Atau Buat Plugin
Pilihan lain untuk mulai mengelompokkan kode Anda berdasarkan fungsi dan membuat plugin Anda sendiri. Bagi saya, saya mulai mengkode dalam file tema functions.php
dan pada saat saya mendapatkan kode itu saya sudah pindah sebagian besar kode saya ke plugin.
Namun TIDAK ADA Perolehan Kinerja Yang Signifikan Dari Organisasi Kode PHP
Di sisi lain, penataan file PHP Anda adalah 99% tentang menciptakan keteraturan dan pemeliharaan dan 1% tentang kinerja, jika itu (pengorganisasian .js
dan .css
file yang dipanggil oleh browser melalui HTTP adalah kasus yang sama sekali berbeda dan memiliki implikasi kinerja yang sangat besar.) Tetapi bagaimana Anda mengatur kode PHP Anda di server cukup banyak tidak masalah dari perspektif kinerja.
Dan Organisasi Kode adalah Preferensi Pribadi
Dan organisasi kode yang tak kalah pentingnya adalah preferensi pribadi. Beberapa orang akan membenci bagaimana saya mengatur kode sama seperti saya mungkin membenci bagaimana mereka melakukannya juga. Temukan sesuatu yang Anda sukai dan tetap menggunakannya, tetapi biarkan strategi Anda berkembang seiring waktu ketika Anda belajar lebih banyak dan lebih nyaman dengannya.
Jawaban terlambat
Cara memasukkan file Anda dengan cara yang benar:
Hal yang sama juga berfungsi pada plugin.
Cara mendapatkan jalur yang benar atau URi
Lihat juga fungsi sistem file API seperti:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
Cara mengurangi jumlah
include/require
Jika Anda perlu mengambil semua file dari direktori, ikuti
Perlu diingat bahwa ini mengabaikan kegagalan (mungkin baik untuk penggunaan produksi) / tidak dapat memuat file.
Untuk mengubah perilaku ini, Anda mungkin ingin menggunakan konfigurasi yang berbeda selama pengembangan:
Edit: pendekatan OOP / SPL
Ketika saya baru saja kembali dan melihat bahwa jawaban ini semakin meningkat, saya pikir saya mungkin menunjukkan bagaimana saya melakukannya sekarang - di dunia PHP 5.3+. Contoh berikut memuat semua file dari subfolder tema yang bernama
src/
. Di sinilah saya memiliki perpustakaan saya yang menangani tugas-tugas tertentu seperti menu, gambar, dll. Anda bahkan tidak perlu peduli dengan nama karena setiap file tunggal dimuat. Jika Anda memiliki subfolder lain di direktori ini, mereka diabaikan.The
\FilesystemIterator
adalah PHP 5.3+ supercedor atas\DirectoryIterator
. Keduanya adalah bagian dari PHP SPL. Sementara PHP 5.2 memungkinkan untuk menonaktifkan ekstensi SPL bawaan (di bawah 1% dari semua pemasangan yang melakukannya), SPL sekarang adalah bagian dari inti PHP.Sebelumnya ketika saya masih mendukung PHP 5.2.x, saya menggunakan solusi berikut: A
\FilterIterator
dalamsrc/Filters
direktori hanya mengambil file (dan bukan dot pointer folder) dan\DirectoryIterator
untuk melakukan perulangan dan memuat.The
\FilterIterator
semudah itu:Selain PHP 5.2 sudah mati / EOL sekarang (dan 5.3 juga), ada fakta bahwa itu lebih banyak kode dan satu file lagi dalam permainan, jadi tidak ada alasan untuk menggunakannya nanti dan mendukung PHP 5.2.x.
Jumlahkan
Artikel yang lebih mendalam dapat ditemukan di sini di WPKrauts .
EDIT Cara yang jelas benar adalah dengan menggunakan
namespace
kode d, disiapkan untuk autoloading PSR-4 dengan meletakkan segala sesuatu di direktori yang sesuai yang sudah ditentukan melalui namespace. Kemudian gunakan saja Komposer dan acomposer.json
untuk mengelola dependensi Anda dan biarkan ia membuat autoloader PHP Anda secara otomatis (yang mengimpor file secara otomatis hanya dengan meneleponuse \<namespace>\ClassName
). Itulah standar de-facto di dunia PHP, cara termudah untuk pergi dan bahkan lebih otomatis dan disederhanakan oleh WP Starter .sumber
dalam hal memecahnya, di piring ketel saya, saya menggunakan fungsi kustom untuk mencari folder yang disebut fungsi dalam direktori tema, jika tidak ada itu membuatnya. Kemudian adalah menciptakan array dari semua file .php yang ditemukan di folder itu (jika ada) dan menjalankan include (); pada masing-masing dari mereka.
Dengan begitu, setiap kali saya perlu menulis beberapa fungsi baru, saya hanya menambahkan file PHP ke folder fungsi, dan tidak perlu khawatir tentang pengkodean ke situs.
sumber
Saya suka menggunakan fungsi untuk file di dalam folder. Pendekatan ini memudahkan untuk menambahkan fitur baru saat menambahkan file baru. Tapi saya selalu menulis di kelas atau dengan ruang nama - berikan lebih banyak kontrol tentang Namespace fungsi, metode dll.
Di bawah ini contoh kecil; ut juga penggunaan dengan perjanjian tentang class * .php
Dalam Tema saya sering menggunakan skenario lain. Saya mendefinisikan fungsi file externel di ID dukungan, lihat contohnya. Itu berguna jika saya akan dengan mudah menonaktifkan feture dari file externel. Saya menggunakan fungsi inti WP
require_if_theme_supports()
dan dia memuat hanya, jika ID dukungan aktif. Pada contoh berikut ini saya membuat ID yang didukung ini di baris sebelum memuat file.Anda dapat melihat lebih banyak dari ini di repo tema ini .
sumber
Saya mengelola situs dengan sekitar 50 jenis halaman khusus yang unik dalam berbagai bahasa serveral melalui instalasi jaringan. Bersamaan dengan satu TON plugin.
Kami di mana terpaksa membagi semuanya pada suatu titik. File fungsi dengan 20-30 ribu baris kode sama sekali tidak lucu.
Kami memutuskan untuk menyelesaikan refactor semua kode untuk mengelola basis kode lebih baik. Struktur tema wordpress default baik untuk situs kecil, tetapi tidak untuk situs yang lebih besar.
Function.php baru kami hanya berisi apa yang diperlukan untuk memulai situs, tetapi tidak ada yang menjadi milik halaman tertentu.
Tata letak tema yang kita gunakan sekarang mirip dengan pola desain MCV, tetapi dalam gaya pengkodean prosedural.
Misalnya halaman anggota kami :
halaman-member.php . Bertanggung jawab untuk menginisialisasi halaman. Memanggil fungsi ajax yang benar atau serupa. Bisa jadi sama dengan bagian Controller dalam gaya MCV.
functions-member.php . Berisi semua fungsi yang terkait dengan halaman ini. Ini juga termasuk dalam halaman serveral lainnya yang membutuhkan fungsi untuk anggota kami.
content-member.php . Mempersiapkan data untuk HTML Bisa sama dengan Model di MCV.
layout-member.php . Bagian HTML.
Setelah kami melakukan perubahan ini, waktu pengembangan dengan mudah turun sebesar 50% dan sekarang pemilik produk kesulitan memberi kami tugas baru. :)
sumber
Dari file child functions.php tema:
sumber
Di functions.php, cara yang lebih elegan untuk memanggil file yang diperlukan adalah:
require_once loc_template ('/ inc / functions / shortcodes.php');
sumber
locate_template()
memiliki parameter ketiga ...Saya menggabungkan jawaban @kaiser dan @mikeschinkel .
Saya memiliki semua penyesuaian untuk tema dalam
/includes
folder dan di dalam folder itu saya memiliki segalanya yang dibagi menjadi sub folder.Saya hanya ingin
/includes/admin
dan sub-kontennya dimasukkan ketikatrue === is_admin()
Jika folder dikecualikan
iterator_check_traversal_callback
dengan mengembalikanfalse
maka sub-direktori tidak akan diulang (atau diteruskan keiterator_check_traversal_callback
)sumber