私は連絡フォームを作成しました(あなたからのたくさんの助けを借りてここに)そして私はそれをページやテキストウィジェットで(サイドバーなどのための)ショートコードを通して使用できるようにしたいです。フォームが送信されたときを除いて、それは両方で完璧に動作します、私はサイドバーウィジェットフォームでIllegal string offset
を得ます。ただし、ページフォームは問題なく機能します。私がやろうとしているのは、フォームが正常に送信されたときにユーザー名をエコーするためにフォームから 'name'フィールドを取得することです。警告をスローするコード行は次のとおりです。
echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';
私も試してみました:
echo '<p>Thank you for contacting us '.(isset($_POST[ 'cf-name' ])).', a member of our team will be in touch with you shortly.</p>';
2番目の例を使用すると、警告は削除されますが、フォームの送信時にユーザー名は表示されず、後者のオプションでは、作業前のページ連絡フォームに1が表示されます。これを修正する方法はありますか?
全機能は次のとおりです。
function my_form_message()
{
global $errors;
if (is_wp_error($errors) && empty($errors->errors)) {
echo '<section class="alertbox-success">';
echo '<div class="cf-success">';
echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';
echo '</div>';
echo '</section>';
//Empty $_POST because we already sent email
$_POST = '';
} else {
if (is_wp_error($errors) && !empty($errors->errors)) {
$error_messages = $errors->get_error_messages();
foreach ($error_messages as $k => $message) {
echo '<section class="alertbox-error">';
echo '<div class="cf-error '.$k.'">';
echo '<p>'.$message.'</p>';
echo '</div>';
echo '</section>';
}
}
}
}
それが役立つかどうかわからない。任意のアイデアは大歓迎です。前もって感謝します
編集:これは完全な警告です:
/Applications/MAMP/htdocs/centenary-framework/wp-content/themes/cent_framework/assets/inc/core/contact-form.php on line 113
Notice: Uninitialized string offset: 0 in /Applications/MAMP/htdocs/centenary-framework/wp-content/themes/cent_framework/assets/inc/core/contact-form.php on line 113
Thank you for contacting us , a member of our team will be in touch with you shortly.
編集:
フルコード:
<?php
// Form markup
function cf_form_code()
{
?>
<div class="cf-contact-form">
<form action="<?php esc_url($_SERVER['REQUEST_URI']);
?>" method="post">
<p>
<input type="text" name="cf-name" placeholder="Name (required)" pattern="[a-zA-Z0-9 ]+" value="<?php isset($_POST['cf-name']) ? esc_attr($_POST['cf-name']) : '';
?><?php if (isset($_POST['cf-name'])) {
echo htmlentities($_POST['cf-name']);
}
?>" size="40" />
</p>
<p>
<input type="email" name="cf-email" placeholder="Email (required)" value="<?php isset($_POST['cf-email']) ? esc_attr($_POST['cf-email']) : '';
?><?php if (isset($_POST['cf-email'])) {
echo htmlentities($_POST['cf-email']);
}
?>" size="40" />
</p>
<p>
<input type="tel" name="cf-tel" placeholder="Telephone" pattern="^\s*\(?(020[7,8]{1}\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\s*$" value="<?php isset($_POST['cf-tel']) ? esc_attr($_POST['cf-tel']) : '';
?><?php if (isset($_POST['cf-tel'])) {
echo htmlentities($_POST['cf-tel']);
}
?>" size="40" />
</p>
<p>
<textarea class="cf-message" rows="10" cols="35" name="cf-message" placeholder="Message (required)" onkeyup="adjust_textarea(this)"><?php isset($_POST['cf-message']) ? esc_attr($_POST['cf-message']) : '';
?><?php if (isset($_POST['cf-message'])) {
echo htmlentities($_POST['cf-message']);
}
?></textarea>
</p>
<p><input type="text" name="content" id="content" value="" class="hpot" /></p>
<p><input type="submit" name="cf-submitted" value="Send"/></p>
</form>
</div>
<?php
}
// Form validation
function cf_validate_form()
{
$errors = new WP_Error();
if (isset($_POST[ 'content' ]) && $_POST[ 'content' ] !== '') {
$errors->add('bot', 'Sorry, this field should not be filled in. Robots only');
}
if (isset($_POST[ 'cf-name' ]) && $_POST[ 'cf-name' ] == '') {
$errors->add('name_error', 'Please fill in a valid name.');
}
if (isset($_POST[ 'cf-email' ]) && $_POST[ 'cf-email' ] == '') {
$errors->add('email_error', 'Please fill in a valid email.');
}
if (isset($_POST[ 'cf-message' ]) && $_POST[ 'cf-message' ] == '') {
$errors->add('message_error', 'Please fill in a valid message.');
}
return $errors;
}
// Form delivery
function deliver_mail($args = array())
{
// This $default array is a way to initialize some default values that will be overwritten by our $args array.
// We could add more keys as we see fit and it's a Nice way to see what parameter we are using in our function.
// It will only be overwritten with the values of our $args array if the keys are present in $args.
// This uses WP wp_parse_args() function.
$defaults = array(
'name' => '',
'email' => '',
'tel' => '',
'message' => '',
'to' => get_option('admin_email'), // get the administrator's email address
);
$args = wp_parse_args($args, $defaults);
$headers = "From: {$args['name']} <{$args['email']}>"."\r\n";
// Send email returns true on success, false otherwise
if (wp_mail($args['to'], $args['tel'], $args['message'], $headers)) {
return;
} else {
return false;
}
}
// Form sanitize
function cf_sanitize_field($input)
{
return trim(stripslashes(sanitize_text_field($input)));
}
// Form succsess message
function cf_form_message()
{
global $errors;
if (is_wp_error($errors) && empty($errors->errors)) {
echo '<section class="alertbox-success">';
echo '<div class="cf-success">';
echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';
echo '</div>';
echo '</section>';
//Empty $_POST because we already sent email
$_POST = '';
} else {
if (is_wp_error($errors) && !empty($errors->errors)) {
$error_messages = $errors->get_error_messages();
foreach ($error_messages as $k => $message) {
echo '<section class="alertbox-error">';
echo '<div class="cf-error '.$k.'">';
echo '<p>'.$message.'</p>';
echo '</div>';
echo '</section>';
}
}
}
}
// Form shortcode
add_shortcode('contact_form', 'cf_contact_form');
function cf_contact_form()
{
ob_start();
cf_form_message();
cf_form_code();
return ob_get_clean();
}
// Error validation
add_action('init', 'cf_cf_form');
function cf_cf_form()
{
if (isset($_POST['cf-submitted'])) {
global $errors;
$errors = cf_validate_form();
if (empty($errors->errors)) {
$args = array(
'name' => cf_sanitize_field($_POST['cf-name']),
'email' => cf_sanitize_field($_POST['cf-email']),
'tel' => cf_sanitize_field($_POST['cf-tel']),
'message' => cf_sanitize_field($_POST['cf-message']),
);
deliver_mail($args);
} else {
return $errors;
}
}
}
未初期化文字列オフセット:0
空の値があるため、このエラーが表示されています。最初に値が!empty()
(空でない)かどうか確認してみてください。これはあなたが私のアップデートであなたの質問で提供するソースコードです。
function cf_form_message() {
global $errors;
if ( is_wp_error( $errors ) && empty( $errors -> errors ) ) {
?>
<section class="alertbox-success">
<div class="cf-success">
<p>Thank you for contacting us <?php if ( isset( $_POST['cf-name'] ) && !empty( $_POST['cf-name'] ) ) { echo $_POST['cf-name']; } else { echo 'NO_NAME'; } ?>, a member of our team will be in touch with you shortly.</p>
</div>
</section>
<?php
//Empty $_POST because we already sent email
$_POST = '';
}
else {
if ( is_wp_error( $errors ) && !empty( $errors -> errors ) ) {
$error_messages = $errors -> get_error_messages();
foreach ( $error_messages as $k => $message ) {
?>
<section class="alertbox-error">
<div class="cf-error <?php echo $k; ?>">
<p><?php echo $message ?></p>
</div>
</section>
<?php
}
}
}
}