Menu Item Save Limit pada WordPress (Solved)

Menu Item Save Limit pada WordPress (Solved)

Bermula ketika salah satu klien, mengeluhkan karena menu item yang ada di wordpress nya tidak bisa bisa ditambah lagi, alias ketika disave menu yang ditambahkan akan hilang, dan beberapa option gagal disimpan, dia mengira itu terkena limit dari wordpress karena menu yang dia punya sekarang sudah mencapai 100an menu, sebagai informasi dia menggunakan UberMenu2,

Setelah diselidiki, akhirnya ketemu juga issue utamanya, sebelumnya kita pahami dulu konsep menu di wordpress :

  1. Untuk menyimpan sebuah menu di wordpress, kita mengirimkan sebuah form ke server menggunakan sebuah HTTP POST dan disimpan di sistem menu wp, dalam hal ini PHP memarsing data dalam sebuah array,
  2. Pada menu sistem wp, menu item akan disave dan diterima dari sisi klien menggunakan $_POST array, yang artinya data yang tidak ada dalam $_POST array tidak ikut disimpan, alias dihapus dan baru wordpress menyimpannya.
  3. Tergantung pada konfigurasi server, tidak semua variabel yang dikirim oleh klient dapat diterima oleh WordPress,  seperti $_POST array dapat terpotong, dan ketika array terpotong, data akan hilang, dan menyebabkan kita kehilangan menu.

Kembali ke masalahnya, setiap menu item pada wordpess di Appearance > Menu, mempunyai sekitar 11-12 field dan beberapa isinya diantaranya (title, classes, description, dan yang lainnya). Ada juga beberapa meta value pada menu, seperti  (menu name, menu ID,dan beberapa lainnya). Semua data itu dikirim ke server sebagai sebuah data POST, setiap field akan dipisahkan oleh variabel. Jadi jika anda punya 10 menu item, anda akan mengirim sekitar 120 POST variabel (11 per item menu + beberapa meta field value). Jika anda punya sekitar 100 an menu, anda berarti akan mengirimkan sekitar 1200 POST variabel.

Dari sini sudah kelihatan, kenyataannya,  PHP directive max_input_vars yang mulai diperkenalkan pada PHP 5.39, pada settingan bawaan defaultnya, cuma memiliki value 1000, hal ini yang menjadi masalah ketika ada 1200 POST variabel yang dikirimkan, tentu data akan terpotong dan hilang.

Solusi : Rubah Konfigurasi di PHP server,

Kita harus memperbesar nilai dari  PHP directive max_input_vars,

1. PHP

secara default  max_input_vars 1000, kita harus ubah menjadi misal 3000, caranya edit dan set pada file php.ini

max_input_vars = 3000

simpan file php.ini, dan restart server apache anda

 

2. Suhosin

Jika php anda menggunakan module Suhosin, anda merubahnya seperti dibawah

suhosin.post.max_vars = 3000
suhosin.request.max_vars = 3000

simpan, dan restart service apache anda.

Di share hosting kebanyakan kita tidak punya akses untuk mengedit php.ini, untuk cara lain anda bisa menambahkan nya ke file .htaccess, tapi itupun  banyak hosting tidak mengijinkan sebuah  PHP directive overrides di htaccessnya, dan akan menyebabkan “Internal Server Error”. Cara yang paling simpelnya, buat sebuah file php.ini, isi dengan konfigurasi diatas, dan letakkan pada root direktori Public_html, khusus untuk wordpress sendiri php.ini harus di letakkan pada/didalam folder wp-admin.

6

No Responses

Kirim Komentar