🌐 Baca artikel ini dalam bahasa lain: English · Español · Deutsch · Français · العربية · Bahasa Melayu · 简体中文 · 日本語
Kebanyakan agensi kecil dan pekerja bebas menghantar invois dengan salah satu daripada dua cara. Cara pertama ialah hamparan Excel dan templat Word yang dieksport ke PDF secara manual. Cara kedua ialah perkhidmatan invois dalam talian yang dibayar setiap pengguna, setiap bulan, tanpa penghujung. Cara pertama rosak sebaik sahaja dua orang menggunakannya serentak. Cara kedua berfungsi dengan baik sehingga anda menambah rakan sepasukan, mata wang kedua, atau pelanggan yang memerlukan sesuatu yang tidak pernah direka untuk produk itu.
Kami menghadapi kedua-dua masalah ini, jadi kami membina plugin invois WordPress kami sendiri: ArtinTech Invoice Manager. Plugin ini berjalan sebagai aplikasi skrin penuh di dalam laman WordPress. Ia menghasilkan invois profesional dengan eksport PDF satu klik, menyimpan buku pelanggan berserta baki, menjejak pembayaran dalam pelbagai mata wang, dan mempunyai panel admin untuk mengurus pengguna. Plugin ini sedang digunakan di laman ini, dan ia merupakan alat yang kami gunakan untuk menginvois pelanggan kami sendiri.
Artikel ini ialah log pembinaan yang lengkap. Ia merangkumi fungsi plugin, cara ia dibina dan sebabnya, model keselamatan, pepijat yang kami temui sebelum pelanggan kami menemuinya, dan apa yang diperlukan untuk menyediakan kod bagi direktori plugin WordPress.org. Jika anda sedang menimbang sama ada mahu membina alat invois khas atau menggunakan yang sedia ada, bahagian akhir ditulis khusus untuk anda.

Mengapa kami membina plugin invois WordPress sendiri
Membina perisian yang boleh disewa biasanya satu kesilapan, jadi wajar kami jelaskan dengan tepat mengapa ia bukan kesilapan kali ini. Faktor penentunya bersifat praktikal, bukan ideologi.
- Data sepatutnya kekal bersama perniagaan. Invois, alamat pelanggan dan sejarah pembayaran ialah rekod kewangan syarikat. Menyimpannya dalam pangkalan data WordPress yang sama, yang sudah kami sandarkan dan kawal, lebih mudah daripada bergantung pada butang eksport pihak ketiga pada hari kami memerlukannya.
- Harga setiap pengguna menekan anda apabila berkembang. Alat dalam talian yang murah untuk seorang pengguna menjadi kos yang ketara apabila pasukan kecil dan beberapa rakan kerjasama memerlukan log masuk sendiri. Kos plugin kekal sama, sama ada digunakan oleh seorang atau dua puluh orang.
- Beberapa pemegang akaun bebas, satu pemasangan. Kami perlukan setiap orang mempunyai invois, pelanggan, logo, butiran bank dan penomboran sendiri, terasing sepenuhnya daripada orang lain, di satu laman.
- Invois kami bersifat antarabangsa. Kami menginvois pelanggan di luar negara, dalam lebih daripada satu mata wang. Kami perlukan jumlah mengikut mata wang yang tidak ditukar secara senyap, dan invois yang mencetak butiran bank untuk pindahan rentas sempadan.
- Kami mahu dapat mengubahnya. Apabila kami memerlukan butang "Tandakan sebagai dibayar" atau suis untuk menyembunyikan logo pelanggan, kami mahukannya pada petang yang sama, bukan menunggu pelan pembangunan vendor.
Semua ini tidak bermakna perisian invois dalam talian itu buruk. Ia cuma pertimbangan yang berbeza, dan lebih mudah difahami jika dibandingkan secara bersebelahan.
| Perkhidmatan invois dalam talian | Plugin invois WordPress hos sendiri | |
|---|---|---|
| Lokasi data | Pelayan vendor | Pangkalan data WordPress anda sendiri |
| Kos apabila pasukan berkembang | Biasanya meningkat bagi setiap pengguna | Tetap, walau berapa pun bilangan pengguna |
| Usaha persediaan | Beberapa minit | Pasang, aktifkan, cipta halaman aplikasi |
| Penyesuaian | Apa yang dibenarkan oleh skrin tetapan | Apa sahaja yang boleh dilakukan oleh kod |
| Penyelenggaraan | Diuruskan oleh vendor | Tanggungjawab anda, seperti plugin lain |
| Integrasi | Selalunya katalog besar penyambung siap sedia | Dibina mengikut keperluan sistem anda sendiri |
Jika lajur kanan kelihatan seperti senarai kerja rumah, alat dalam talian mungkin pilihan yang lebih baik untuk anda. Jika ia kelihatan seperti senarai perkara yang memang sudah anda lakukan untuk laman web anda, plugin mula menjadi pilihan yang munasabah.
Cara ia berfungsi: dari pemasangan hingga invois dibayar
Sebelum masuk ke butiran, berikut aliran kerja keseluruhan dari awal hingga akhir: apa yang dilakukan pentadbir sekali sahaja, dan apa yang dilakukan pemegang akaun setiap kali menginvois pelanggan. Sembilan langkah, setiap satu ditunjukkan pada antara muka sebenar.
Langkah 1: Pasang plugin dan cipta halaman aplikasi
- Muat naik plugin melalui Plugins → Add New → Upload Plugin dan aktifkannya.
- Buka menu baharu Invoice Manager di wp-admin.
- Klik Create app page.
Tindakan ini menerbitkan halaman di /invoice-manager/, dan halaman itu menjadi aplikasi. Tiada perkara lain di laman anda yang berubah. Pentadbir boleh terus menggunakan aplikasi.
Langkah 2: Log masuk, atau benarkan orang lain mendaftar
Halaman aplikasi memaparkan skrin log masuk tersendiri kepada sesiapa yang belum log masuk. Pengguna log masuk dengan nama pengguna atau e-mel WordPress biasa, dan terdapat pautan "Remember me" serta "Forgot password".

Jika anda mengaktifkan pendaftaran awam, pautan Create one muncul di bawah borang log masuk dan membuka skrin pendaftaran. Jika kelulusan admin diaktifkan, akaun baharu kekal menunggu sehingga diluluskan oleh pentadbir.

Langkah 3: Tetapkan butiran perniagaan anda sekali sahaja
Setiap pemegang akaun bermula di My settings:
- Muat naik logo, kemudian pilih individu atau syarikat.
- Masukkan alamat, butiran hubungan dan nombor cukai.
- Pilih mata wang lalai dan tempoh pembayaran.
- Tampal butiran bank anda.
- Tetapkan awalan dan nombor permulaan invois, serta tambah kadar cukai anda sendiri.
Semua maklumat di sini diisi secara automatik ke dalam invois baharu, jadi anda hanya perlu menaipnya sekali.

Langkah 4: Tambah pelanggan anda
Melalui Clients → Add Client, simpan setiap pelanggan sekali sahaja: logo, nama syarikat dan orang hubungan, e-mel, telefon, alamat dan nombor cukai. Buku pelanggan boleh dicari, dan setiap kad menunjukkan bilangan invois pelanggan serta jumlah yang masih tertunggak.

Langkah 5: Cipta invois
Klik New invoice. Nombor, tarikh, mata wang, terma dan butiran anda sudah diisi.
- Pilih pelanggan.
- Tambah item baris dengan kuantiti, harga dan cukai.
- Gunakan diskaun jika perlu, dan tambah medan tersuai seperti nombor pesanan belian.
- Pilih sama ada logo anda dan logo pelanggan dipaparkan pada invois ini.
- Klik Save.
Jumlah dikira semula semasa anda menaip.

Langkah 6: Pratonton dan muat turun PDF
Preview memaparkan invois tepat seperti yang akan diterima pelanggan. Download PDF menyimpan fail bersaiz A4 yang boleh anda e-melkan, muat naik ke portal pelanggan atau cetak.
Tiga templat tersedia, dipilih bagi setiap invois melalui menu templat di editor:
- Blank: susun atur yang bersih dan minimalis.
- Modern: jalur pengepala berwarna.
- Classic: fon serif dengan garisan pembahagi.

Langkah 7: Rekod pembayaran
Apabila wang diterima, klik Mark paid pada baris invois, atau ikon $ untuk merekod bayaran separa berserta tarikh, kaedah dan rujukan. Status berubah dengan sendirinya:
- Partially paid (dibayar separa) selepas bayaran ansuran.
- Paid (dibayar) apabila baki mencecah sifar.
- Overdue (lewat bayar) jika tarikh akhir berlalu sebelum invois dijelaskan sepenuhnya.

Langkah 8: Jejak jumlah yang masih tertunggak
Jumlah di papan pemuka dikemas kini serta-merta. Bagi seorang pelanggan tertentu, buka halamannya dalam buku pelanggan untuk melihat:
- Semua yang diinvois, diterima dan tertunggak, mengikut mata wang.
- Setiap invois yang pernah anda hantar kepadanya.
Inilah skrin yang patut dibuka sebelum membuat panggilan susulan.

Langkah 9: Urus pengguna
Pentadbir, dan sesiapa yang diberi peranan Invoice Manager Admin, membuka Admin panel → Users. Dari situ mereka boleh:
- Meluluskan pendaftaran yang menunggu, dan pengguna menerima e-mel secara automatik.
- Menggantung atau mengaktifkan semula akaun.
- Menambah pengguna secara terus. Pengguna baharu menerima e-mel untuk menetapkan kata laluan.
- Menukar peranan dan memadam akaun.

Apa yang dilakukan plugin ini: lawatan ciri
Aliran kerja di atas menunjukkan laluan utama. Lawatan ini merangkumi selebihnya yang boleh dilakukan oleh plugin. Semuanya berjalan dalam satu halaman laman web, dengan antara muka yang direka untuk terasa seperti aplikasi tersendiri, bukan skrin WordPress.
Papan pemuka invois
Skrin utama menjawab soalan yang membuatkan setiap pemilik perniagaan membuka alat invois: siapa berhutang apa kepada kita? Empat angka dipaparkan di bahagian atas: jumlah diinvois, diterima, tertunggak dan lewat bayar. Setiap satu dikira berasingan bagi setiap mata wang, dengan pemilih apabila pemegang akaun menginvois dalam lebih daripada satu mata wang. Di bawahnya ialah empat invois terkini dalam bentuk kad, diikuti senarai invois penuh.
Senarai boleh dicari mengikut nombor invois atau nama pelanggan, ditapis mengikut pelanggan, status, jenis dokumen dan julat tarikh, serta disusun mengikut mana-mana lajur. Dari setiap baris, anda boleh merekod pembayaran, menandakan invois sebagai dibayar, memuat turun PDF, menyalin atau memadamnya tanpa perlu membukanya.
Editor invois
Editor disusun seperti dokumen siap, jadi apa yang anda taip muncul di tempat sebenar. Panel sebelah kanan menempatkan tindakan.
- Empat jenis dokumen: Invoice (invois), Quote (sebut harga), Proforma dan Credit Note (nota kredit).
- Penomboran automatik dengan awalan bagi setiap pengguna, seperti AT2623. Nombor masih boleh diubah, dan nombor pendua akan ditolak.
- Tarikh terbit dan tarikh akhir. Tarikh akhir diisi berdasarkan tempoh pembayaran lalai setiap orang.
- Item baris dengan kuantiti, harga seunit, penerangan dan kadar cukai yang dipilih daripada senarai kadar pengguna sendiri.
- Diskaun peringkat invois, medan tersuai seperti nombor pesanan belian, maklumat syarikat tambahan dan penerangan bebas.
- Butiran pelanggan, dipilih daripada buku pelanggan atau ditaip untuk kegunaan sekali, dengan pilihan menyimpan pelanggan baharu serta-merta.
- Pemilih mata wang bagi setiap invois, dan teks terma yang diisi awal daripada tetapan.
Jumlah dikemas kini semasa anda menaip. Jika anda cuba keluar dengan perubahan yang belum disimpan, aplikasi akan bertanya sebelum membuangnya. Butiran kecil ini lebih penting dalam alat invois berbanding hampir di mana-mana tempat lain.
Pembayaran, status dan "Tandakan sebagai dibayar"
Tiada sesiapa menetapkan status invois secara manual. Status diperoleh daripada pembayaran yang direkodkan, jadi ia tidak mungkin bercanggah dengan wang sebenar.
| Pembayaran direkodkan | Status dipaparkan |
|---|---|
| Tiada | Unpaid (belum dibayar) |
| Kurang daripada jumlah | Partially paid (dibayar separa) |
| Sama atau melebihi jumlah | Paid (dibayar) |
| Belum dijelaskan sepenuhnya dan tarikh akhir telah berlalu | Overdue (lewat bayar) |
| Jenis dokumen ialah Quote | Quote (tidak pernah dikira sebagai pendapatan) |
Setiap pembayaran mempunyai tarikh, jumlah, kaedah dan nota pilihan, jadi ansuran dan kekurangan akibat caj bank dapat direkodkan dengan tepat. Bagi kes paling biasa, iaitu pelanggan membayar penuh, terdapat butang satu klik Mark as paid. Ia merekod satu pembayaran bagi baki yang tinggal, bertarikh hari ini.
Eksport PDF dan templat
Setiap invois boleh dipratonton dan dimuat turun sebagai PDF A4 dalam salah satu daripada tiga templat: susun atur Blank yang bersih, susun atur Modern dengan jalur pengepala berwarna, dan susun atur Classic berfon serif dengan garisan pembahagi.
PDF tersebut mengandungi:
- Logo penghantar dan logo pelanggan. Setiap satu boleh dimatikan bagi invois tertentu.
- Kedua-dua alamat.
- Item baris, diskaun, cukai dan jumlah.
- Sebarang pembayaran yang diterima, baki perlu dibayar, butiran bank dan terma.
Buku pelanggan
Pelanggan disimpan sekali dan digunakan semula. Setiap pelanggan mempunyai logo, nama syarikat dan orang hubungan, alamat, nombor cukai dan nota.
Senarai pelanggan menunjukkan jumlah yang masih tertunggak bagi setiap pelanggan, manakala halaman setiap pelanggan memaparkan:
- Jumlah diinvois, diterima dan tertunggak bagi setiap mata wang.
- Sejarah invois penuh mereka.
- Butang untuk memulakan invois baharu dengan butiran pelanggan sudah diisi.
Tetapan peribadi untuk setiap pemegang akaun
Setiap pengguna mempunyai:
- Logo sendiri, dan pilihan identiti sebagai individu atau syarikat.
- Alamat dan nombor telefon dengan kod dail antarabangsa.
- Nombor pendaftaran cukai dan laman web.
- Mata wang lalai dan tempoh pembayaran dalam hari.
- Butiran bank, awalan nombor invois dan nombor seterusnya.
- Teks terma lalai dan senarai kadar cukai bernama.
Oleh itu, dua orang di laman yang sama boleh mengeluarkan invois yang kelihatan seperti datang daripada dua perniagaan berbeza, kerana memang begitulah hakikatnya.
Pendaftaran, kelulusan dan panel admin
Aplikasi mempunyai skrin log masuk dan pendaftaran tersendiri di bahagian hadapan, jadi pemegang akaun tidak perlu melihat wp-admin. Pendaftaran awam adalah pilihan. Apabila diaktifkan, akaun baharu boleh diwajibkan mendapat kelulusan pentadbir sebelum digunakan, dan pentadbir menerima e-mel bagi setiap pendaftaran.
Di dalam aplikasi, pentadbir mendapat Admin panel dengan empat bahagian:
- Overview: bilangan akaun dan jumlah invois merentas semua pengguna.
- Users: meluluskan, menggantung, mengaktifkan semula, menambah atau memadam akaun serta menukar peranan.
- Sign-up settings: tetapan pendaftaran.
- Messages: mesej yang dihantar melalui borang "Contact us" dalam aplikasi.

Seni bina: bagaimana plugin invois WordPress sepatutnya menyimpan data
Kebanyakan kualiti jangka panjang sesebuah plugin ditentukan oleh model datanya, kerana itulah satu-satunya bahagian yang sukar diubah sebaik sahaja invois sebenar wujud. Kami membuat empat keputusan awal, dan keempat-empatnya terbukti tepat.
Jenis kiriman tersuai, bukan jadual tersuai
Invois, pelanggan dan mesej hubungan disimpan sebagai jenis kiriman tersuai (custom post types) yang peribadi. Setiap rekod dimiliki oleh pengguna WordPress yang menciptanya, dan data berstruktur disimpan dalam satu entri post meta. Tetapan peribadi disimpan dalam user meta, manakala pilihan seluruh plugin menggunakan Options API.
Jadual pangkalan data tersuai mungkin sedikit lebih pantas pada jumlah yang sangat besar. Sebagai balasan, jenis kiriman memberi kami banyak kelebihan secara percuma:
- Sandaran dan migrasi WordPress yang biasa merangkumi data ini secara automatik.
- Alat eksport sudah memahaminya.
- Cache objek berfungsi tanpa kod tambahan.
- Memadam pengguna boleh turut memadam rekodnya tanpa sebaris pun kod pembersihan.
Alat invois untuk perniagaan jarang menyimpan lebih daripada beberapa ribu invois bagi setiap orang. Pada skala itu, pendekatan asli WordPress ialah pilihan yang tepat.
Jenis kiriman ini didaftarkan sebagai peribadi sepenuhnya: tidak awam, tidak boleh ditanya, dikecualikan daripada carian, serta tersembunyi daripada REST API dan peta laman. Invois tidak mungkin terbocor secara tidak sengaja ke dalam hasil carian tema atau peta laman plugin SEO.
Salinan tetap: mengapa invois menyalin butiran penghantar dan pelanggan
Invois ialah rekod undang-undang bagi satu detik masa. Jika anda berpindah pejabat tahun depan, invois tahun lepas mesti masih menunjukkan alamat tahun lepas. Oleh itu, apabila invois dicipta, plugin menyalin butiran penghantar ke dalamnya, dan melakukan perkara yang sama bagi butiran pelanggan.
Mengubah tetapan anda atau alamat pelanggan tidak sekali-kali menulis semula sejarah. Apabila anda benar-benar mahu draf lama menggunakan butiran baharu, editor menyediakan tindakan khusus, "Use my latest settings", dan bukannya melakukannya secara senyap.
Invois juga menyimpan pautan kepada rekod pelanggan, yang menjadi asas pengiraan baki setiap pelanggan. Apabila pelanggan dipadam, pautan dikosongkan tetapi salinan kekal. Invois masih dapat dibaca dengan betul, cuma tidak lagi dikira bagi pelanggan yang sudah tiada.
Status dikira, bukan disimpan
Status "lewat bayar" bergantung pada tarikh hari ini, jadi menyimpannya akan menjadikannya salah menjelang esok. Plugin menyimpan fakta: item, diskaun, pembayaran dan tarikh akhir. Status dikira setiap kali invois dibaca. Medan status yang disimpan ialah salah satu punca paling biasa masalah "papan pemuka kata sudah dibayar tetapi bank kata sebaliknya" dalam perisian perniagaan.
Pengiraan kewangan yang diterima akauntan
- Diskaun dikenakan sebelum cukai. Diskaun 10% mengurangkan subjumlah dan cukai yang dikenakan ke atasnya, seperti yang dijangka oleh kebanyakan sistem cukai.
- Cukai dikenakan bagi setiap baris. Setiap item mempunyai kadar sendiri, jadi satu invois boleh menggabungkan kerja bercukai dan tidak bercukai.
- Nota kredit dikira sebagai negatif dalam setiap jumlah, dan sebut harga tidak dikira langsung.
- Mata wang tidak pernah ditukar. Jumlah disimpan mengikut mata wang. Penukaran secara senyap pada kadar pertukaran tertentu akan menghasilkan angka yang tidak sepadan dengan invois mahupun bank.
- Jumlah dikira semula di pelayan daripada item baris apabila invois disimpan. Pengiraan pelayar hanya untuk paparan, jadi permintaan yang dimanipulasi tidak boleh menyimpan jumlah yang tidak tepat.
REST API dengan semakan pemilikan pada setiap permintaan
Bahagian hadapan berkomunikasi dengan WordPress melalui ruang nama REST khusus. Setiap laluan melalui semakan kebenaran yang sama. Permintaan mesti datang daripada pengguna yang log masuk dengan keupayaan khas plugin dan status akaun aktif, serta membawa nonce WordPress yang sah.
Selain itu, setiap permintaan yang merujuk invois atau pelanggan menyemak bahawa rekod itu milik pengguna semasa. Jika tidak, API menjawab not found (tidak ditemui) dan bukan forbidden (dilarang). Perbezaan ini disengajakan: "dilarang" mengesahkan bahawa rekod dengan ID itu wujud, manakala "tidak ditemui" tidak mendedahkan apa-apa. Kami mengujinya secara khusus, dengan meminta invois satu akaun ketika log masuk sebagai akaun lain.
Setiap medan yang masuk dibersihkan dan dihadkan panjangnya:
- Tarikh mesti mengikut format yang ketat.
- Mata wang mesti terdiri daripada tiga huruf.
- Jenis dokumen dan templat mesti datang daripada senarai tetap.
- Logo hanya diterima sebagai imej yang sudah dimuat naik ke pustaka media laman itu sendiri.
Imej yang dimuat naik dinyahkod dan disemak untuk memastikan ia benar-benar fail PNG, JPEG, GIF atau WebP sebelum sampai ke pustaka media. SVG ditolak kerana fail SVG boleh membawa skrip.
Satu butiran praktikal menjimatkan kami daripada tiket sokongan pada masa hadapan. Sesetengah hos kongsi dan peraturan tembok api menyekat terus permintaan HTTP PUT dan DELETE. Oleh itu, aplikasi menghantar setiap operasi tulis sebagai POST dengan pengepala method-override standard WordPress, yang disokong secara asli oleh REST API. Laluan kekal RESTful, dan permintaan tetap berjaya walaupun pada hos yang ketat.
Akaun, peranan dan kelulusan
Plugin menambah dua peranan dan satu model keupayaan, dan tidak menyentuh peranan asal WordPress kecuali untuk memberi pentadbir akses.
| Peranan | Boleh guna aplikasi | Boleh urus pemegang akaun | Boleh urus admin invois dan peranan |
|---|---|---|---|
| Administrator (pentadbir) | Ya | Ya | Ya |
| Invoice Manager Admin | Ya | Ya | Tidak |
| Invoice Account Holder | Ya | Tidak | Tidak |
Peranan tengah wujud supaya pengurus pejabat boleh meluluskan dan menyokong pengguna tanpa diberi kunci seluruh laman web. Pentadbir tidak boleh digantung atau dipadam dari dalam aplikasi, dan tiada sesiapa boleh memadam akaunnya sendiri di situ. Inilah jenis kesilapan yang mengunci orang daripada laman mereka sendiri.
Pendaftaran awam dimatikan sehingga pentadbir mengaktifkannya. Apabila diaktifkan, borang dilindungi dengan empat cara:
- Nonce.
- Medan honeypot tersembunyi yang diisi oleh bot tetapi tidak oleh manusia.
- Had lima pendaftaran bagi setiap alamat rangkaian dalam sejam.
- Panjang minimum kata laluan.
Apabila kelulusan diaktifkan, akaun baharu boleh log masuk tetapi hanya melihat skrin "menunggu kelulusan" sehingga pentadbir meluluskannya. Pengguna menerima e-mel pada saat itu. Menggantung pengguna akan melog keluar mereka daripada semua peranti serta-merta, dengan memusnahkan sesi WordPress mereka, tanpa menunggu kuki tamat tempoh.
Aplikasi skrin penuh yang tidak boleh dirosakkan oleh tema
Aplikasi invois mesti kelihatan dan berkelakuan sama di setiap laman tempat ia dipasang. Gaya butang tema, set semula gaya pembina halaman atau pengoptimum skrip plugin cache semuanya boleh merosakkan antara muka berbentuk aplikasi dengan cara yang halus. Oleh itu, plugin mengambil alih paparan halamannya sendiri sepenuhnya.
Apabila pelawat membuka halaman aplikasi, plugin memaparkan templat minimum sendiri dan bukan tema. Templat itu hanya mencetak fail gaya dan skrip plugin sendiri, melalui fungsi gaya dan skrip standard WordPress, tanpa apa-apa daripada tema atau plugin lain. Halaman itu juga memberitahu sistem cache supaya tidak menyimpannya dan enjin carian supaya tidak mengindeksnya, kerana ia aplikasi, bukan kandungan.
Antara muka itu sendiri ditulis dalam modul JavaScript biasa tanpa rangka kerja, dan digabungkan menjadi satu fail yang boleh dibaca. Navigasi menggunakan laluan berasaskan hash, jadi beralih antara invois, pelanggan dan tetapan tidak memuat semula halaman, dan butang kembali pelayar tetap berfungsi. Fon yang digunakan, DM Sans, disertakan bersama plugin dan tidak dimuatkan daripada perkhidmatan fon, jadi aplikasi tidak menghantar sebarang permintaan ke pelayan pihak ketiga.
Susun atur direka untuk telefon sejak awal. Pada skrin kecil:
- Bar sisi menjadi menu gelongsor.
- Jadual data bertukar menjadi kad bertindan, dengan label pada setiap nilai.
- Editor invois disusun semula menjadi satu lajur.
Invois sering disemak melalui telefon, apabila pelanggan memaklumkan bahawa mereka sudah membayar.


Menjana invois PDF di dalam pelayar
Penjanaan PDF di pelayan menggunakan PHP biasanya bermaksud pustaka yang berat, fon di pelayan, had memori dan hasil yang sangat berbeza antara hos. Sebaliknya, kami menjana PDF di dalam pelayar pengguna:
- Invois dipaparkan sebagai dokumen HTML bersaiz A4.
- Dokumen itu ditukar menjadi imej.
- Imej diletakkan ke dalam fail PDF menggunakan pustaka sumber terbuka html2pdf.js.
Pendekatan ini ada tiga kelebihan:
- PDF kelihatan sama persis dengan pratonton pada skrin, kerana ia memang pratonton itu.
- Ia berfungsi pada mana-mana hos.
- Tiada data invois dihantar ke mana-mana untuk ditukar.
Pertimbangannya, teks dalam PDF ialah imej, bukan teks yang boleh dipilih. Bagi invois yang dibaca, dicetak dan difailkan, itu harga yang berbaloi untuk hasil yang sama di mana-mana.
Pepijat yang kami temui sebelum pelanggan kami menemuinya
Setiap satu daripada pepijat ini muncul di skrin sebenar. Ia wajar diterangkan, kerana setiap satu mewakili jenis pepijat yang turut muncul dalam projek lain.
Halaman kedua kosong akibat setengah piksel
Invois satu halaman dimuat turun sebagai PDF dua halaman, dan halaman kedua kosong. Puncanya: dokumen pada skrin mempunyai ketinggian minimum 1123 piksel supaya pratonton kelihatan seperti sehelai kertas penuh, sedangkan ketinggian A4 pada 96 DPI ialah 1122.5 piksel. Lebihan setengah piksel itu sudah cukup untuk pustaka PDF memulakan halaman baharu.
Pembaikan ini membuang ketinggian minimum hanya ketika eksport, jadi pratonton masih kelihatan seperti kertas. Kami mengesahkannya dengan mengira halaman PDF yang dijana: dua sebelum pembaikan, satu selepasnya. Invois dengan 45 baris masih mengalir dengan betul ke halaman kedua yang berisi kandungan.
Pautan log keluar yang melepaskan dirinya sendiri
Fungsi URL log keluar WordPress memulangkan URL yang sudah dilepaskan (escaped) untuk HTML, dengan tanda & ditulis sebagai &. Itu betul di dalam atribut HTML tetapi salah di dalam JavaScript, di mana tanda & yang dilepaskan merosakkan token keselamatan dan proses log keluar. Pembaikan ini menyahkod URL sekali sebelum menyerahkannya kepada aplikasi. Pepijat kecil, tetapi tipikal bagi apa yang berlaku di sempadan antara templat PHP dan JavaScript.
Logo pelanggan yang tidak pernah sampai ke invois
Logo pelanggan boleh dimuat naik dan disimpan dengan betul, tetapi tidak pernah muncul pada invois. Salinan tetap yang disimpan dalam setiap invois tidak menyertakannya. Pembaikan ini mempunyai dua bahagian:
- Invois baharu kini menyertakan logo dalam salinan tetap.
- Invois yang disimpan lebih awal menggunakan logo semasa pelanggan yang dipautkan apabila dibaca, tanpa menulis semula data tersimpan.
Membiarkan data tersimpan tidak disentuh ketika membaiki masalah paparan ialah tabiat yang wajar dikekalkan.
Kad papan pemuka yang bercanggah dengan jadual
Selepas menandakan invois sebagai dibayar daripada senarai, baris jadual bertukar hijau tetapi kad "invois terkini" di atasnya masih menunjukkan Unpaid sehingga halaman dimuat semula. Dua paparan bagi data yang sama tidak lagi selari. Kini, sebarang tindakan yang mengubah invois akan memaparkan semula seluruh skrin daripada data terkini, jadi setiap angka pada halaman sentiasa sepadan.
Penjajaran selepas logo ditambah
Apabila logo pelanggan diletakkan di atas alamatnya, blok "To" bermula lebih rendah daripada blok "From", dan invois kelihatan tidak seimbang. Mengalihkan logo ke sebelah kanan alamat menyelesaikannya: kedua-dua blok bermula pada baris yang sama, dan logo sejajar dengan nombor invois di atasnya. Kami kemudian memberi lajur pelanggan sedikit lebih lebar supaya alamat jalan tipikal di Switzerland kekal dalam satu baris. Pengajarannya: uji susun atur invois dengan data pelanggan sebenar, kerana nama contoh sentiasa pendek dengan mudahnya.
Persediaan untuk direktori plugin WordPress.org
Kod yang berfungsi di laman anda sendiri dan kod yang lulus semakan WordPress.org bukanlah perkara yang sama. Direktori ini mempunyai peraturan khusus, dan kami mengubah beberapa perkara untuk memenuhinya sebelum menghantar.
- Tiada panggilan ke pelayan luar. Fon asalnya dimuatkan daripada perkhidmatan fon, yang menghantar alamat IP setiap pelawat kepada pihak ketiga. Kini fon disertakan bersama plugin di bawah lesen fon terbukanya.
- Skrip dan gaya melalui fungsi WordPress sendiri. Tag script dan link yang ditulis terus digantikan dengan aset berdaftar yang berversi. Konfigurasi masa jalan dilampirkan melalui mekanisme skrip sebaris standard.
- Kod sumber yang boleh dibaca. Direktori tidak menerima kod yang dimampatkan tanpa sumbernya. Himpunan aplikasi dihantar tanpa dimampatkan, modul asal disertakan, dan fail readme menerangkan cara membinanya semula.
- Lesen pihak ketiga dinyatakan. Pustaka PDF dan fon disenaraikan dalam readme bersama lesen dan pautan sumber, dan fail lesennya disertakan bersama plugin.
- Plugin tidak mencetuskan hook teras. Versi awal mencetuskan tindakan log masuk WordPress sendiri selepas pendaftaran. Kini ia merekod log masuk melalui kodnya sendiri.
- Nyahpasang atas pilihan. Memadam plugin tidak membuang apa-apa kecuali pentadbir meminta pembuangan data secara jelas. Invois ialah rekod perniagaan, dan kehilangannya akibat klik tidak sengaja tidak boleh diterima.
- Readme yang lengkap dengan penerangan ringkas, langkah pemasangan, soalan lazim, bahagian privasi dan log perubahan. Kod disusun supaya alat Plugin Check rasmi dapat menyemaknya dengan lancar.
Tiada satu pun peraturan ini menjadikan plugin lebih buruk, malah beberapa daripadanya menjadikannya lebih baik. Menyertakan fon bersama plugin, sebagai contoh, menghapuskan terus persoalan privasi.
Patutkah anda membina plugin invois WordPress khas atau menggunakan yang sedia ada?
Terus terang, kebanyakan perniagaan tidak perlu menempah alat invois khas. Jika seorang sahaja menghantar beberapa invois sebulan dalam satu mata wang, produk sedia ada akan memadai dan lebih murah daripada sebarang pembinaan khas. Pembinaan khas menjadi pilihan lebih baik apabila beberapa perkara berikut benar:
- Beberapa orang memerlukan sistem invois berasingan dan terasing dalam satu sistem, dan harga setiap pengguna mula membebankan.
- Invois perlu disambungkan kepada sesuatu yang khusus bagi perniagaan anda, seperti sistem tempahan, penjejak projek, ERP atau portal pelanggan.
- Anda menginvois dalam beberapa mata wang dan memerlukan jumlah yang tidak pernah ditukar tanpa pengetahuan anda.
- Invois anda memerlukan peraturan yang tidak disokong oleh alat siap sedia, seperti langkah kelulusan khas, jenis dokumen atau skema penomboran.
- Anda mahu data kewangan kekal dalam infrastruktur yang anda miliki, sandarkan dan kawal sendiri.
Jika hanya satu daripadanya terpakai, lihat produk sedia ada dengan lebih teliti dahulu. Jika tiga atau lebih terpakai, plugin yang fokus seperti ini biasanya lebih murah dalam tempoh dua atau tiga tahun berbanding langganan dan penyelesaian sementara yang digantikannya. Ia juga melakukan tepat apa yang anda perlukan.
Apa pun pilihan anda, nilai mana-mana alat invois berdasarkan perkara yang dibincangkan dalam artikel ini:
- Adakah ia menyimpan rekod tetap bagi setiap invois, supaya perubahan kemudian pada butiran anda atau pelanggan tidak menulis semula invois lama?
- Adakah ia mengira status daripada pembayaran, dan bukan menyimpannya?
- Adakah ia mengasingkan mata wang?
- Adakah ia mengasingkan pengguna antara satu sama lain?
- Bolehkah anda mengeluarkan data anda?
Soalan lazim
Bolehkah plugin invois WordPress mengendalikan lebih daripada seorang pengguna?
Ya, jika ia direka untuk itu. Dalam ArtinTech Invoice Manager, setiap invois dan pelanggan dimiliki oleh pemegang akaun yang menciptanya, dan API menyemak pemilikan pada setiap permintaan. Setiap pengguna mempunyai tetapan, logo, penomboran dan butiran bank sendiri, dan tidak dapat melihat data orang lain.
Adakah ia menghantar data invois kepada perkhidmatan pihak ketiga?
Tidak. Semua data disimpan dalam pangkalan data WordPress laman itu sendiri. PDF dijana dalam pelayar pengguna, dan fon disertakan bersama plugin. Satu-satunya mesej keluar ialah e-mel WordPress biasa, seperti notis pendaftaran dan kelulusan.
Bolehkah ia menginvois dalam mata wang berbeza?
Ya. Setiap invois mempunyai mata wang sendiri, dan papan pemuka serta halaman pelanggan menunjukkan jumlah secara berasingan bagi setiap mata wang. Tiada penukaran dilakukan, jadi angka sentiasa sepadan dengan invois yang benar-benar anda hantar.
Adakah ia serasi dengan tema atau pembina halaman saya?
Ya. Halaman aplikasi dipaparkan dengan templat dan aset plugin sendiri, jadi tema, Elementor atau mana-mana pembina lain tidak dapat mengubah rupa atau kelakuannya. Bahagian lain laman anda tidak terjejas langsung.
Adakah plugin ini tersedia di WordPress.org?
Kami telah menyediakannya untuk direktori plugin WordPress.org, dan ia akan disenaraikan di sana selepas lulus semakan. Sementara itu, jika anda ingin menggunakannya atau mahukan versi yang disesuaikan dengan aliran kerja anda, hubungi kami.
Bolehkah anda membina versi khas untuk perniagaan saya?
Ya. Susun atur invois khas, jenis dokumen tambahan, integrasi dengan sistem tempahan atau projek, portal pelanggan dan aliran kerja kelulusan semuanya lanjutan munasabah bagi asas yang sama. Lihat perkhidmatan pembangunan plugin WordPress kami untuk mengetahui cara kami menentukan skop kerja tersebut.
Membina alat WordPress seperti ini ialah teras kerja kami. Ada yang merupakan pembaikan kecil, seperti ralat 403 berkaitan cache yang kami jejaki hingga ke jangka hayat nonce. Ada pula aplikasi penuh seperti ini, yang dihasilkan melalui perkhidmatan pembangunan WordPress dan pembangunan CMS dan ERP khas kami. Jika anda sedang menimbang alat invois, atau mana-mana perisian lain yang perniagaan anda terpaksa elak masalahnya, mari berbincang. Kami akan memberikan penilaian yang jujur, termasuk apabila jawapannya ialah produk sedia ada sudah memadai.