如何在 functions.php 中为自定义表单正确创建 link
How to correctly create a link for a custom form in functions.php
我正在尝试在 functions.php 中创建自己的表单。我做了很多研究,发现使用 Post / Redirect / Get 来避免 重新提交 POST 请求是最安全的。一切正常。表单发送POST,动作文件处理一切,保存到SESSION并重定向回来。表格在页面上:http://plovarnaluhacovice.icreation.cz/my-account/zustatek-kreditu/
但我的问题是我不希望 link "Send" 有 link: http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php, but http://plovarnaluhacovice.icreation.cz/my-account/zustatek-kreditu/process .php 出于安全原因。
为了让它变得有点复杂,我使用了 WooCommerce 插件,并将此页面 (/zustatek-kreditu/) 添加到 WooCommerce "My Account" 页面菜单(照片)。
形式:
<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. functions.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' );
process.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");
}
?>
最简单的解决方案是在 wp 中创建一个页面模板,将其添加到名称为 "Page-process.php" 的主题文件夹中,并将 process.php 的所有代码放入该模板中,然后将以下文本添加到此模板的顶部:
创建一个wp页面并select将此模板作为其下的页面模板
"Page Attributes"元框。
在您的表单代码中将操作 URL 替换为您刚刚创建的页面并链接到您创建的新页面模板。
动作="http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php"
回顾:
您将用 WordPress 上的普通页面替换您的 "porcess.php",该页面将使用您放置在 "process.php" 上的页面 PHP 代码,但此权限将允许您 运行你的代码与 wp 页面而不是直接在主题 PHP 文件上。
谢谢,让我知道发生了什么!! :)
我正在尝试在 functions.php 中创建自己的表单。我做了很多研究,发现使用 Post / Redirect / Get 来避免 重新提交 POST 请求是最安全的。一切正常。表单发送POST,动作文件处理一切,保存到SESSION并重定向回来。表格在页面上:http://plovarnaluhacovice.icreation.cz/my-account/zustatek-kreditu/
但我的问题是我不希望 link "Send" 有 link: http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php, but http://plovarnaluhacovice.icreation.cz/my-account/zustatek-kreditu/process .php 出于安全原因。
为了让它变得有点复杂,我使用了 WooCommerce 插件,并将此页面 (/zustatek-kreditu/) 添加到 WooCommerce "My Account" 页面菜单(照片)。
形式:
<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. functions.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' );
process.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");
}
?>
最简单的解决方案是在 wp 中创建一个页面模板,将其添加到名称为 "Page-process.php" 的主题文件夹中,并将 process.php 的所有代码放入该模板中,然后将以下文本添加到此模板的顶部:
创建一个wp页面并select将此模板作为其下的页面模板 "Page Attributes"元框。
在您的表单代码中将操作 URL 替换为您刚刚创建的页面并链接到您创建的新页面模板。
动作="http://plovarnaluhacovice.icreation.cz/wp-content/themes/Divi_Child/process.php"
回顾: 您将用 WordPress 上的普通页面替换您的 "porcess.php",该页面将使用您放置在 "process.php" 上的页面 PHP 代码,但此权限将允许您 运行你的代码与 wp 页面而不是直接在主题 PHP 文件上。
谢谢,让我知道发生了什么!! :)