特定のテーブル内の新しいエントリに対してデータベースのスクラブを実行するサードパーティのサービスを使用しています。しかし、WordPressの機能に影響を与えないような、テーブル内のWordPressデータベースにデータを送信する単純なフォームプラグインを見つけることができませんでした。その理由は、私のホスティングプロバイダは私に1つのデータベースしか許可していないからです。
私のワードプレスでは、次のようなフォームを使う必要があります。
それほど詳細なことは何もありませんし、wordpress管理で結果を見るのは素晴らしいことですが、myphpadminを使用できるので必ずしも必要ではありません。
要約すれば:
私は単純なhtml/phpフォームが必要です、そこで私はちょうどページのためのhtml/codeビューを通してワードプレス管理を通してページにフォームhtmlを貼り付けることができます。ユーザーがフォームを送信すると、Wordpressデータベースに保存され、次に "ありがとう"ページにユーザーがリダイレクトされます。
私が理解できるのは、あなたがすでにあなたのデータベースにテーブルを持っているということです。
名前の付け方はわかりませんが、ベストプラクティス(必ずしなければならないことです)は、wp-config.php
に設定されているものと同じwordpressというプレフィックスを使用して名前を付けることです。
また、このテーブルがどのように構成されているかも説明していませんが、次のようになると思います。
ID (integer,primary,autoincrement) | name (varchar) | phone (varchar) | email (varchar)
フォームを印刷するためのショートコードを追加することができます。 functions.php
に以下を追加してください。
add_action('init', function() {
add_shortcode('userform', 'print_user_form');
});
function print_user_form() {
echo '<form method="POST">';
wp_nonce_field('user_info', 'user_info_nonce', true, true);
?>
All your form inputs (name, email, phone) goes here.
<?php
submit_button('Send Data');
echo '</form>';
}
Wpダッシュボードで投稿またはページを作成し、[userform]
を追加するだけです。フォームはページの 魔法のように printendです。
ご覧のとおり、formにaction属性を追加していません。このように、フォームは投稿データを同じページに送信します。
今、あなたはデータを保存しなければなりません。早い段階でアクションを追加し、$_POST
を探し、ナンスをチェックしてデータを保存します。
add_action('template_redirect', function() {
if ( ( is_single() || is_page() ) &&
isset($_POST[user_info_nonce]) &&
wp_verify_nonce($_POST[user_info_nonce], 'user_info')
) {
// you should do the validation before save data in db.
// I will not write the validation function, is out of scope of this answer
$pass_validation = validate_user_data($_POST);
if ( $pass_validation ) {
$data = array(
'name' => $_POST['name'],
'email' => $_POST['email'],
'phone' => $_POST['phone'],
);
global $wpdb;
// if you have followed my suggestion to name your table using wordpress prefix
$table_name = $wpdb->prefix . 'my_custom_table';
// next line will insert the data
$wpdb->insert($table_name, $data, '%s');
// if you want to retrieve the ID value for the just inserted row use
$rowid = $wpdb->insert_id;
// after we insert we have to redirect user
// I sugest you to cretae another page and title it "Thank You"
// if you do so:
$redirect_page = get_page_by_title('Thank You') ? : get_queried_object();
// previous line if page titled 'Thank You' is not found set the current page
// as the redirection page. Next line get the url of redirect page:
$redirect_url = get_permalink( $redirect_page );
// now redirect
wp_safe_redirect( $redirect_url );
// and stop php
exit();
}
}
});
コードは大まかですが、有効な出発点になるはずです。インラインコメントは、ワークフローを理解するのに役立ちます。
必ず文書を読んでください。
考慮すべき1つのことは、NAME
は予約語で、Wordという名前のフィールドを使用すると、フォームを送信するときに404
not foundエラーが発生することです。