You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义页面集成注册登录与联系表单求助(无Widget区域)

Hey Michael, since your WordPress theme doesn’t have widget areas, let’s walk through exactly how to add registration/login functionality and a contact form to your custom template pages. I’ll break this down into simple, actionable steps for each feature:

1. Integrate Registration & Login Functionality

You can use WordPress’s built-in functions or create reusable shortcodes (great for multiple pages). Here’s how to do both:

Option 1: Directly Add to Your Custom Template

Login Form

WordPress has a native wp_login_form() function that you can drop right into your template file. Customize it with arguments to fit your needs:

<?php
// Configure login form settings (redirect to current page after login)
$login_args = array(
    'redirect' => get_permalink(),
    'label_username' => 'Username',
    'label_password' => 'Password',
    'label_remember' => 'Remember Me',
    'label_log_in' => 'Log In',
    'remember' => true
);
// Output the login form
wp_login_form($login_args);
?>

Registration Form

First, make sure user registration is enabled in your WordPress admin (Settings > General > Anyone can register). Then you can build a custom form with proper validation:

<?php
// Handle registration submission with security checks
if (isset($_POST['submit_registration'])) {
    // Verify nonce to prevent CSRF attacks
    if (!isset($_POST['registration_nonce']) || !wp_verify_nonce($_POST['registration_nonce'], 'registration_action')) {
        wp_die('Invalid request.');
    }

    // Sanitize user input to prevent malicious code
    $username = sanitize_user($_POST['username']);
    $email = sanitize_email($_POST['email']);
    $password = $_POST['password'];

    // Register the new user
    $user_id = register_new_user($username, $email);
    if (!is_wp_error($user_id)) {
        // Auto-login the user after successful registration
        wp_set_current_user($user_id);
        wp_set_auth_cookie($user_id);
        wp_redirect(get_permalink());
        exit;
    } else {
        // Show error message if registration fails
        echo '<p class="form-error">' . $user_id->get_error_message() . '</p>';
    }
}
?>

<!-- Custom Registration Form HTML -->
<form method="post" action="<?php echo get_permalink(); ?>">
    <?php wp_nonce_field('registration_action', 'registration_nonce'); ?>
    <p>
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
    </p>
    <p>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required>
    </p>
    <p>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>
    </p>
    <p>
        <input type="submit" name="submit_registration" value="Register">
    </p>
</form>

Option 2: Create Reusable Shortcodes

If you need these forms on multiple pages, add these shortcode functions to your theme’s functions.php file:

// Login Form Shortcode
function custom_login_form_shortcode() {
    ob_start();
    $login_args = array(
        'redirect' => get_permalink(),
        'label_username' => 'Username',
        'label_password' => 'Password',
        'label_remember' => 'Remember Me',
        'label_log_in' => 'Log In',
        'remember' => true
    );
    wp_login_form($login_args);
    return ob_get_clean();
}
add_shortcode('custom_login', 'custom_login_form_shortcode');

// Registration Form Shortcode
function custom_registration_form_shortcode() {
    ob_start();
    // Handle submission logic (same as above)
    if (isset($_POST['submit_registration'])) {
        if (!isset($_POST['registration_nonce']) || !wp_verify_nonce($_POST['registration_nonce'], 'registration_action')) {
            wp_die('Invalid request.');
        }
        $username = sanitize_user($_POST['username']);
        $email = sanitize_email($_POST['email']);
        $password = $_POST['password'];

        $user_id = register_new_user($username, $email);
        if (!is_wp_error($user_id)) {
            wp_set_current_user($user_id);
            wp_set_auth_cookie($user_id);
            wp_redirect(get_permalink());
            exit;
        } else {
            echo '<p class="form-error">' . $user_id->get_error_message() . '</p>';
        }
    }
    // Output form
    ?>
    <form method="post" action="<?php echo get_permalink(); ?>">
        <?php wp_nonce_field('registration_action', 'registration_nonce'); ?>
        <p>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required>
        </p>
        <p>
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required>
        </p>
        <p>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required>
        </p>
        <p>
            <input type="submit" name="submit_registration" value="Register">
        </p>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('custom_registration', 'custom_registration_form_shortcode');

Then use them in your template like this:

<?php echo do_shortcode('[custom_login]'); ?>
<?php echo do_shortcode('[custom_registration]'); ?>
2. Add a Contact Form

Build this natively without plugins, either directly in your template or as a shortcode.

Direct Template Integration

<?php
// Handle contact form submission
if (isset($_POST['submit_contact'])) {
    // Nonce validation for security
    if (!isset($_POST['contact_nonce']) || !wp_verify_nonce($_POST['contact_nonce'], 'contact_action')) {
        wp_die('Invalid request.');
    }

    // Sanitize user input
    $name = sanitize_text_field($_POST['name']);
    $email = sanitize_email($_POST['email']);
    $message = sanitize_textarea_field($_POST['message']);

    // Send email to your admin email
    $to = get_option('admin_email');
    $subject = 'New Contact Message from ' . $name;
    $body = "Name: $name\nEmail: $email\nMessage:\n$message";
    $headers = array('From: ' . $name . ' <' . $email . '>');

    // Check if email sent successfully
    if (wp_mail($to, $subject, $body, $headers)) {
        echo '<p class="form-success">Your message was sent successfully!</p>';
    } else {
        echo '<p class="form-error">Oops, something went wrong. Please try again later.</p>';
    }
}
?>

<!-- Contact Form HTML -->
<form method="post" action="<?php echo get_permalink(); ?>">
    <?php wp_nonce_field('contact_action', 'contact_nonce'); ?>
    <p>
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required>
    </p>
    <p>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required>
    </p>
    <p>
        <label for="message">Message:</label>
        <textarea id="message" name="message" rows="5" required></textarea>
    </p>
    <p>
        <input type="submit" name="submit_contact" value="Send Message">
    </p>
</form>

Reusable Contact Form Shortcode

Add this to your functions.php:

function custom_contact_form_shortcode() {
    ob_start();
    // Handle submission logic
    if (isset($_POST['submit_contact'])) {
        if (!isset($_POST['contact_nonce']) || !wp_verify_nonce($_POST['contact_nonce'], 'contact_action')) {
            wp_die('Invalid request.');
        }
        $name = sanitize_text_field($_POST['name']);
        $email = sanitize_email($_POST['email']);
        $message = sanitize_textarea_field($_POST['message']);

        $to = get_option('admin_email');
        $subject = 'New Contact Message from ' . $name;
        $body = "Name: $name\nEmail: $email\nMessage:\n$message";
        $headers = array('From: ' . $name . ' <' . $email . '>');

        if (wp_mail($to, $subject, $body, $headers)) {
            echo '<p class="form-success">Your message was sent successfully!</p>';
        } else {
            echo '<p class="form-error">Oops, something went wrong. Please try again later.</p>';
        }
    }
    // Output form
    ?>
    <form method="post" action="<?php echo get_permalink(); ?>">
        <?php wp_nonce_field('contact_action', 'contact_nonce'); ?>
        <p>
            <label for="name">Name:</label>
            <input type="text" id="name" name="name" required>
        </p>
        <p>
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required>
        </p>
        <p>
            <label for="message">Message:</label>
            <textarea id="message" name="message" rows="5" required></textarea>
        </p>
        <p>
            <input type="submit" name="submit_contact" value="Send Message">
        </p>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('custom_contact', 'custom_contact_form_shortcode');

Use it in your template with:

<?php echo do_shortcode('[custom_contact]'); ?>
3. Key Additional Tips
  • Style the Forms: The default forms will be plain, so add custom CSS to your theme’s style.css to match your design. Target classes like .form-error, .form-success, and form elements to make them fit your theme.
  • Check User Login Status: Show different content to logged-in vs. logged-out users with this snippet:
if (is_user_logged_in()) {
    echo '<p>You’re logged in! <a href="' . wp_logout_url(get_permalink()) . '">Log Out</a></p>';
} else {
    // Show login/registration forms
    wp_login_form();
}
  • Email Deliverability: If your contact form emails aren’t arriving, ensure your WordPress site is configured to send emails properly. You can use wp_mail filters to set up SMTP if needed (no external plugins required, just add a few lines to functions.php).

内容的提问来源于stack exchange,提问作者Michael Benzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:48:27