私はWordPressの初心者ですが、テキストボックスから値を取得してWordPressのデータベースに保存したいのであれば、PHPプログラミングに長けています。
元の
form1.html
<form name="form" method="post" action="value_get.php">
<input type="text" id="t1" name="t1">
<input type="submit" value="submit">
</form>
value_get.php
<?php
$firstname = mysqli_real_escape_string($con, $_POST['tb1']);
$con=mysqli_connect("localhost","root","","wordpress");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO wp_exTable (FirstName)
VALUES ('$firstname')");
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
WordPressでこれらのことができますか?少し調整して
プログラミングとPHPの経験がある場合、フォームからのデータの保存には基本的に次の手順が含まれることを知っています。
「プレーン」PHPがすべての場合に機能する場合でも、WordPressにはヘルパーと特定のベストプラクティスがあります。
これは、WordPressがあまり役に立たない唯一の部分です。 PHPはあなたの友達です。
WordPressには、サニタイズ用のさまざまなヘルパーがあります。
フォームからのデータには、使用できるsanitize_text_field()
などのさまざまなsanitize_ *関数があります。それらを見つける here 。リンクにあるすべての関数がスコープに役立つわけではないことに注意してください。
WordPressコンテキストでは、データベースに接続しません。 WordPressに任せてから、データベースAPIを使用してデータベースでクエリを実行します。
WordPressデータベースAPIは、グローバル$wpdb
変数で使用可能なwpdb
オブジェクトにまとめられています。
他に何もする必要はありません。 WordPressも必要に応じて接続を閉じます。
global $wpdb
APIのドキュメントが利用可能です here 。ご覧のとおり、多くの方法があります。
おそらく最も有用なのは、CRUDの操作のヘルパーです。
get_results()
/get_row()
/get_col()
/get_var()
insert()
update()
delete()
上記で紹介したsanitize_*
関数でサニタイズされたデータは、データベースに保存する前にデータベース固有のメソッドでエスケープする必要があることに注意することは重要ではありません。
スコープには、メソッド prepare()
があり、sprintf
のような構文を使用してSQLステートメントをエスケープする方法を提供します。
フォームからのデータをprocessするには、上記のすべてが必要です。
ただし、次のものも必要です。
WordPressでは、フロントエンドに属するフォームとバックエンドに属するフォームの2つのカテゴリのフォームを区別できます。
フロンエントフォームの場合、おそらくすべてのHTMLをテンプレートの1つに配置し、それで終わりです。
バックエンドフォームの場合、多くの可能性があります。
投稿に関連する値を保存する場合は、おそらく メタボックスを追加 にして、そこにフォームを配置します。実際、この場合、「完全な」フォームを使用するのではなく、投稿編集フォーム全体の一部となるフォーム入力のみを使用します。
特定の「フック」を使用して、分類法、ユーザーなどの編集/作成フォームにフィールドを追加するために、同じアプローチをとることができます。このWebサイトおよびWeb全般には、これに関する例とガイダンスが多数あります。
保存するデータがWordPressコアの「エンティティ」と完全に無関係である場合(たとえば、カスタムプラグインのオプションページを作成する場合)、おそらく 管理ページを登録する そしてフォームをそこに配置します。
フォームからのデータを処理する方法は、printedの方法によって異なります。
既存のWordPressフォームにフィールドを追加する方法を使用した場合、独自のルーチンを使用することはできませんが、hook既存のルーチンとデータを処理します。
たとえば、投稿メタボックスを追加した場合、フィールドは投稿の編集/作成フォームに追加され、 save_post
または WordPressの保存時に起動される他のフックをフックする必要があります投稿 、yourフォームフィールドからのデータをチェックして処理します。
フォームがフロントエンドから来た場合、またはバックエンドで完全に新しいフォームを作成した場合、フォームを処理するファイルを作成したくなるかもしれません。
WordPress環境($wpdb
オブジェクトを覚えていますか?)を使用するため、これは実際には機能しません。したがって、手動でbootstrap WordPressが必要になります。
代わりに次のことができます。
admin-ajax.php
に送信し(完全なURLはadmin_url('admin-ajax.php')
を介して取得されます)、"admin_ajax_{$action}"
/admin_ajax_nopriv_{$action}
を使用してルーチンをフックします。 AJAX_in_Pluginsに関するコーデックス を参照してください。admin-post.php
に送信し(完全なURLはadmin_url('admin-post.php')
を介して取得されます)、"admin_post_{$action}"
/admin_post_nopriv_{$action}
を使用してルーチンをフックしますWordPressには独自のテーブルと特定のデータ構造があります。
dbDelta
関数を使用すると、カスタムテーブルを作成でき、$wpdb
オブジェクトは引き続きそれらを操作できますが、これはできるだけ避ける必要があります。
理由は、WordPressのカスタムテーブルは維持するのが面倒であり(WPには移行やフィクスチャのようなものが欠けている)、カスタムテーブルを使用すると、適合する場合に利用可能なWordPress APIの多くを使用する可能性が失われるためですデータをWordPressコアの「エンティティ」に入れます。
たとえば、データが投稿に関連している場合は、分類法を使用するか、メタを投稿して保存できます。
データがユーザー関連のデータである場合、ユーザーメタ、または分類用語に関連するデータの用語メタを使用できます。
「汎用」データの場合は、オプションを使用するか、テーマ固有の統合の場合はテーマの変更を使用できます。
そうすると、データを取得/保存する必要があるときに、wpdb
メソッドを使用する代わりに、特定のAPIを使用できます。
タクソノミ 、 ポストメタ 、 タームメタ 、 ユーザーメタ 、 オプション 、- テーマの変更 ...データへのアクセスを簡素化し、キャッシュ、フィルタリング機能、コアの他の部分との互換性(カスタマイザーやREST APIなど)を提供します。 )、プラグインとの互換性...
データベースに値を保存する簡単な解決策はWordPressのadd_option()
関数を使うことです。データベースのwp_options
テーブルに値を格納します。
$firstname = mysqli_real_escape_string( $con, $_POST[ 'tb1' ] );
add_option( 'first_name' , $firstname );
echo "1 record added";
その後、get_option( 'first_name' )
を使用していつでも値にアクセスできます。
よりカスタマイズされたクエリを実行したい場合は$wpdb->query()
を使用してください。詳しくは ẁpdb
Codexのページを読んでください。
mysqli_connect
のようなネイティブのPHP関数を使う代わりに、WordPressが提供する可能性を利用するべきです。これは互換性と保守容易性の理由からより優れています。つまり、 wpdb
クラス を使用することができます。これはWordPress自身のデータベーステーブルだけでなく外部のものにも使用できます。新しいエントリを追加するには、クラスのinsert()
メソッドを使用します - 詳細については、wpdb
Codexページの INSERT rows セクションを参照してください。以下にいくつかの例示的なコードがあります。
global $wpdb;
$fname = $_POST[ 'txt_fname' ];
$lname = $_POST[ 'txt_lname' ];
$tbl = 'wp_exTable';
$others = $_POST[ 'txt_email' ];
$wpdb->insert(
'wp_exTable',
array(
'first_name' => $fname,
'last_name' => $lname,
'email' => $others
),
array(
'%s',
'%s',
'%s'
)
);
大事なことを言い忘れましたが、あなたが実際に追加のテーブルを必要としているのなら、あなたはおそらくその事実について考えるべきです。たとえば、@ RamShengaleが提案したようなポストメタを利用できます。
Wordpressでデータベースのレコードを更新するためにこのコードを試してください。これのために最初にあなたの選択されたwordpressフォルダの中にfile.php
を作成しそしてそれからテンプレートとしてこのファイルを使用しなさい。そしてこのコードは完璧に動作します、そして名前を検証するための正しい正規表現を誰かが知っているなら私に示唆してください。皆さん、ありがとうございました。
<?php /* Template Name: your template name */ ?>
<style>
.error {color: #FF0000;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
type="text/javascript"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css"
rel="Stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
//this calculates values automatically
$("#name").keypress(function() {
validate();
});
});
function validate() {
/*=============== Validate The Name ======================*/
var fname =document.forms["abc"]["name"].value;
var name_regex = /^[a-z A-Z]+$/;
if(fname == 0||fname==null )
{
document.getElementById('nameErr').innerHTML = "* Please fill your name";
return false;
}
else
{
if (!fname.match(name_regex)) {
document.getElementById('nameErr').innerHTML = "* Name should be alphabet";
return false;
}
else{
document.getElementById('nameErr').innerHTML = "";
}
}
}
<?php get_header(); ?>
<?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_tablename;
$data = array(
'firstname' => $_POST['yourname']
);
$format = array(
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'Thanks for submitting your information soon we will contact to you';
}
}
else {
?>
<div class="container">
<div class="row">
<form method="post" class="form-horizontal" id="abc" onsubmit="return validate(this)">
<div class="col-md-3">Full name: </div><div class="col-md-8"> <input type="text" name="yourname" class="form-control" id="name"><span class="error" id="nameErr"></span></div>
<div class="col-md-6"><input type="reset" name="reset" class="btn btn-danger"></div><div class="col-md-6"><input type="submit" value="Register" class="btn btn-success"></div>
</form>
</div>
</div>
<?php } ?>
<?php get_footer(); ?>