(Wiki página de Backend Frontend Template Pro: the WordPress Plugin Template)
Un formulario manual es posible gracias a apuntar la página a una function personalizada para mostrar el formulario y a una function_load personalizada para guardar los cambios del formulario
Puedes usar la página bft-admin-display-form.php para mostrar el formulario o crear tu propia página
- function personalizada Recupera los datos como quieras y envíalos a la función $this->admin_menu_page_display(), por ejemplo: $args = [ “title” => $this->admin_pages_data_get(“page_title”), “id” => $id, “ids” => $ids, “form_data” => [ “page_name” => $this->page_name, “data” => $data, “column_key” => $column_key, ], ]; $this->admin_menu_page_display($args); Si la página usa bft-admin-display-form.php los datos se formarán de esta manera: $data = [ “column_name_1” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_1, “value” => “”, ], “column_name_2” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_2, “value” => “”, ], “column_group_name_1” => [ “label” => “”, “values” => [ “column_name_3” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_3, “value” => “”, ], “column_name_4” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_4, “value” => “”, ], ], ], ];
- function_load personalizada Esta función se ejecuta primero, se envíen datos POST por el navegador o no, parar la función si no se han enviado datos POST o se encuentra algún error, ejemplo: if (“POST” !== $_SERVER[‘REQUEST_METHOD’]) { return false; } Al final de la función usa redirección si es necsario. Para redireccionar puede usarse wp_redirect() o $this->custom_form_redirect()
- wp_redirect($url) Esta función de WordPress necesita la URL completa, por eso BFT ofrece mejores alternativas:
- $this->admin_page_url_get() Devuelve la página mostrada actualmente sin datos GET adicionales, sólo el dato GET de la página https://yourfuturewebsite/wp-admin/admin.php?page=bft_pro_manual_data_manipulation_form_explanation
- $this->gets_for_admin_page($id) Devuelve los datos GET necesarios para el formulario de la página. Ej: si una página usa el formulario ‘courses’, envíale el id ‘1’ y devolverá: &course_id=1
- $this->custom_form_redirect($id = false) Esta función BFT hace una redirección a la URL compelta con el ID necesario para el formulario y añade &action=new o &action=edit dependiendo en si se le ha pasado ID
- wp_redirect($url) Esta función de WordPress necesita la URL completa, por eso BFT ofrece mejores alternativas:
- Ejemplo completo $this->admin_pages = [ “manual_data_manipulation_form_simple_example_teacher” => [ /*”ids_required” => [ “teacher_id” => “id”, ],*/ “admin_forms_id” => “teachers”, “columns” => [ “id”, “name”, “surname”, “id_card”, ], “menu_title” => $this->__(“Example 1”), “page_title” => $this->__(“Teacher”).” 1, “function” => “manual_data_manipulation_form_example_for_two_pages_get”, “file” => “bft-admin-display-form.php”, “function_load” => “manual_data_manipulation_form_example_for_two_pages_set”, ], ]; public function manual_data_manipulation_form_example_for_two_pages_get() { $this->admin_permission_check(); global $wpdb; $ids = $this->ids_required_and_optional_check_and_get($ids_principal_aux_type = “principal”, $ids_require_optional_type = “both”, $read_all_get_data = false); //$ids will be empty on the example, adding the id $ids[“id”] = “1”; //teachers or students $admin_forms_id = $this->admin_pages_data_get_admin_forms_id(); /* Remember: on $this->admin_pages you can store all the data you want and retrieve it with $this->admin_pages_data_get(); Teachers: “columns” => [ “id”, “name”, “surname”, “id_card”, ], Students: “columns” => [ “id”, “name”, “surname”, ], */ $columns_array = $this->admin_pages_data_get( “columns”); //$language_admin = $this->language_admin_get(); if (0 == count($ids) || false == $admin_forms_id || !isset($this->admin_forms[$admin_forms_id]) || false == $columns_array) { $error_message = $this->__(“Error message”); $this->error_throw ($error_message, $error_throw_what_do_use_this = “show_error_and_die”); } $id = sanitize_key(array_values($ids)[0]); $query = ” SELECT “.implode(“, “, $columns_array).” FROM “.$this->admin_forms[$admin_forms_id][“table”].” WHERE id = ‘$id'”; $data_database = $this->wpdb_get_result_one_row($query); if (0 == count($data_database)) { $error_message = $this->__(“Error message”); $this->error_throw ($error_message, $error_throw_what_do_use_this = “show_error_and_die”); } $data = array(); foreach ($data_database AS $data_database_key => $data_database_value) { if (isset($this->admin_forms[$admin_forms_id][“columns”][$data_database_key])) { $data[$data_database_key] = $this->admin_forms[$admin_forms_id][“columns”][$data_database_key]; $data[$data_database_key][“value”] = $data_database_value; } } $args = [ “title” => $this->admin_pages_data_get(“page_title”), “id” => $id, “ids” => $ids, “form_data” => [ “page_name” => $this->page_name, “data” => $data, “column_key” => $this->admin_forms[$admin_forms_id][“column_key”], ], ]; $this->admin_menu_page_display($args); } public function manual_data_manipulation_form_example_for_two_pages_set() { $this->admin_permission_check(); $redirect_page = false; $request_method = “POST”; if ($request_method !== $_SERVER[‘REQUEST_METHOD’]) { //Post data not found return false; } $data_raw = $_POST; if ( !isset($data_raw[“_wpnonce”]) || !wp_verify_nonce($data_raw[“_wpnonce”], $this->plugin_slug.”_form”)) { //Nonce not verified return false; } //For security check $this->ids_required_and_optional_check_and_get($ids_principal_aux_type = “principal”, $ids_require_optional_type = “both”, $read_all_get_data = false); //teachers or students $admin_forms_id = $this->admin_pages_data_get_admin_forms_id(); /* Remember: on $this->admin_pages you can store all the data you want and retrieve it with $this->admin_pages_data_get(); Teachers: “columns” => [ “id”, “name”, “surname”, “id_card”, ], Students: “columns” => [ “id”, “name”, “surname”, ], */ $columns_array = $this->admin_pages_data_get( “columns”); if ( false == $admin_forms_id || !isset($this->admin_forms[$admin_forms_id]) || false == $columns_array) { return false; } $data_row = array(); foreach ($columns_array AS $column) { if (!isset($data_raw[$column])) { return false; } $data_row[$column] = $data_raw[$column]; } $this->wpdb_insert_update_on_duplicate_key($this->admin_forms[$admin_forms_id][“table”], $data_row, $multi_row = false); /* Query executed: INSERT INTO wp_bft_pro_teachers ( datetime_modified, id, name, surname, id_card, datetime_created ) VALUES ( ‘2023-01-01 00:00:01’, ‘1’, ‘Teacher 1 edited’, ‘surname 1’, ‘1111’, ‘2023-01-01 00:00:01’ ) ON DUPLICATE KEY UPDATE datetime_modified = ‘2023-01-01 00:00:01’, id = ‘1’, name = ‘Teacher 1 edited’, surname = ‘surname 1’, id_card = ‘1111’ Obviously the duplicate key will be executed on this case for the “id” column Note the automated columns: $this->database_datetime_created_name (datetime_created) $this->database_datetime_modified_name (datetime_modified) */ if (true === $redirect_page) { //ids not specified in the example page, this is for a complete case $this->custom_form_redirect($data_row[“id”]); } else { return true; } }

0 comentarios