Как правильно создать ссылку для пользовательской формы в функциях. php - PullRequest
2 голосов
/ 15 февраля 2020

Я пытаюсь создать свою собственную форму в функциях. php. Я провел много исследований и нашел, что безопаснее всего делать формы, используя Post / Redirect / Get , чтобы избежать Повторно отправляет POST-запрос . Все отлично работает Форма отправляет POST, файл действия обрабатывает все, сохраняет его в SESSION и перенаправляет обратно. Форма находится на странице: http://plovarnaluhacovice.icreation.cz/my-account/zustatek-kreditu/

Но моя проблема в том, что я не хочу, чтобы ссылка "Отправить" имела ссылку: http://plovarnaluhacovice.icreation.cz/ wp-content / themes / Divi_Child / process. php, но http://plovarnaluhacovice.icreation.cz/ my-account / zustatek-kreditu / process. php по соображениям безопасности.

Чтобы сделать его немного сложнее, я использую плагин WooCommerce, и эта страница (/ zustatek-kreditu /) добавляется в меню страницы WooCommerce "Моя учетная запись" (фото).

enter image description here

Форма:

<form action="http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php" method="post">
    <p>Uživatelské jméno: <br><input type="text" name="username" /></p>
    <p>Heslo: <br><input type="password" name="password" /></p>
    <br><button type="submit" name="save">Přidat</button>
</form>

Структура файла:

wp -content / themes / 1. Divi_Child 2. функции. php 3. process. php

Пользовательское меню WooCommerce:

//ZŮSTATEK KREDITU

// ------------------

// 1. Register new endpoint to use for My Account page

// Note: Resave Permalinks or it will give 404 error



function zustatek_kreditu_endpoint() {
    add_rewrite_endpoint( 'zustatek-kreditu', EP_ROOT | EP_PAGES );
}

add_action( 'init', 'zustatek_kreditu_endpoint' );  

// ------------------

// 2. Add new query var

function zustatek_kreditu_query_vars( $vars ) {
    $vars[] = 'zustatek-kreditu';
    return $vars;
}

add_filter( 'query_vars', 'zustatek_kreditu_query_vars', 0 );

// ------------------

// 3. Insert the new endpoint into the My Account menu

function zustatek_kreditu_link_my_account( $items ) {
    $items['zustatek-kreditu'] = 'Zůstatek kreditu';
    return $items;
}

add_filter( 'woocommerce_account_menu_items', 'zustatek_kreditu_link_my_account' );

// ------------------

// 4. Add content to the new endpoint

?>
    <form action="http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php" method="post">
        <p>Uživatelské jméno: <br><input type="text" name="username" /></p>
        <p>Heslo: <br><input type="password" name="password" /></p>
        <br><button type="submit" name="save">Přidat</button>
    </form>
<?php   

add_action( 'woocommerce_account_zustatek-kreditu_endpoint', 'hlavniMetoda' );

процесс. php файл:

<?php

require_once __DIR__ . '/../../../wp-config.php';
global $wp;
global $wpdb;
$current_user_id = wp_get_current_user()->ID;

if (isset($_POST['save'])) {
    if($current_user_id > 0) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        $dotaz = "INSERT INTO {$wpdb->prefix}abonent(username, password, ID_users) VALUES('{$username}', '{$password}', {$current_user_id})";
        $result = $wpdb->query($dotaz);

        if($result) {
            $_SESSION['zprava'] = "Přidáno";
        }
        else {
            $_SESSION['zprava'] = "Chyba.";
        }
    }
    header("Location: http://plovarnaluhacovice.icreation.cz/muj-ucet/zustatek-kreditu");
}
?>

1 Ответ

2 голосов
/ 15 февраля 2020
  1. Самое простое решение - создать шаблон страницы в wp, добавить его в папку вашей темы под именем «Page-process. php» и поместить все кодировки процесса. php в Этот шаблон и добавьте следующий текст в верхнюю часть этого шаблона:

  2. Создайте страницу wp и выберите этот шаблон на нем, как шаблон страницы в разделе мета «Атрибуты страницы» box.

  3. В коде формы замените URL-адрес действия на всю страницу, которую вы только что создали, и ссылку на новый созданный вами шаблон страницы.

    action = "http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php "

Резюме: Вы собираетесь заменить ваш" porcess. php "обычной страницей на WordPress, которая будет использовать страницу PHP коды, которые вы поместили в «process. php», но эта привилегия позволит вам запускать код на странице wp, а не непосредственно в файле темы PHP.

Спасибо, дайте мне знать, что происходит! ! :)

...