为wordpress自定义一个留言表单并可以在后台进行管理的实现方法

要为WordPress添加留言表单功能并实现后台管理,你可以按照以下步骤操作:

1. 创建留言表单

首先,你需要创建一个留言表单。可以使用插件(如Contact Form 7)或手动编写代码。

使用Contact Form 7插件

安装并激活Contact Form 7插件。

创建一个新表单,添加以下字段:

姓名(单行文本框)

邮箱(邮箱输入框)

电话(单行文本框)

地址(单行文本框)

留言内容(多行文本框)

将生成的短代码插入到页面或文章中。

手动编写代码

如果你更喜欢手动编写代码,可以在主题的functions.php文件中添加以下代码:

function custom_contact_form() {ob_start(); ?><form action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post"><p><label for="name">姓名</label><input type="text" name="name" required></p><p><label for="email">邮箱</label><input type="email" name="email" required></p><p><label for="phone">电话</label><input type="text" name="phone" required></p><p><label for="address">地址</label><input type="text" name="address" required></p><p><label for="message">留言内容</label><textarea name="message" required></textarea></p><p><input type="submit" name="submit" value="提交"></p></form><?phpreturn ob_get_clean();
}
add_shortcode('custom_contact_form', 'custom_contact_form');

然后在页面或文章中使用[custom_contact_form]短代码来显示表单。

2. 处理表单提交

在functions.php中添加代码来处理表单提交并将数据保存到数据库中:

function handle_form_submission() {if (isset($_POST['submit'])) {global $wpdb;$table_name = $wpdb->prefix . 'custom_messages';$name = sanitize_text_field($_POST['name']);$email = sanitize_email($_POST['email']);$phone = sanitize_text_field($_POST['phone']);$address = sanitize_text_field($_POST['address']);$message = sanitize_textarea_field($_POST['message']);$wpdb->insert($table_name,array('name' => $name,'email' => $email,'phone' => $phone,'address' => $address,'message' => $message,'status' => '未读','created_at' => current_time('mysql')));}
}
add_action('init', 'handle_form_submission');

3. 创建数据库表

在functions.php中添加代码来创建数据库表:

function create_custom_messages_table() {global $wpdb;$table_name = $wpdb->prefix . 'custom_messages';$charset_collate = $wpdb->get_charset_collate();$sql = "CREATE TABLE $table_name (id mediumint(9) NOT NULL AUTO_INCREMENT,name tinytext NOT NULL,email tinytext NOT NULL,phone tinytext NOT NULL,address tinytext NOT NULL,message text NOT NULL,status tinytext NOT NULL,created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,PRIMARY KEY (id)) $charset_collate;";require_once(ABSPATH . 'wp-admin/includes/upgrade.php');dbDelta($sql);
}
register_activation_hook(__FILE__, 'create_custom_messages_table');

4. 创建后台管理菜单

在functions.php中添加代码来创建后台管理菜单:

function custom_messages_menu() {add_menu_page('留言管理','留言管理','manage_options','custom-messages','custom_messages_page');
}
add_action('admin_menu', 'custom_messages_menu');function custom_messages_page() {global $wpdb;$table_name = $wpdb->prefix . 'custom_messages';$messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC");echo '<div class="wrap">';echo '<h1>留言管理</h1>';echo '<table class="wp-list-table widefat fixed striped">';echo '<thead><tr><th>ID</th><th>姓名</th><th>邮箱</th><th>电话</th><th>地址</th><th>留言内容</th><th>状态</th><th>操作</th></tr></thead>';echo '<tbody>';foreach ($messages as $message) {echo '<tr>';echo '<td>' . esc_html($message->id) . '</td>';echo '<td>' . esc_html($message->name) . '</td>';echo '<td>' . esc_html($message->email) . '</td>';echo '<td>' . esc_html($message->phone) . '</td>';echo '<td>' . esc_html($message->address) . '</td>';echo '<td>' . esc_html($message->message) . '</td>';echo '<td>' . esc_html($message->status) . '</td>';echo '<td><a href="' . admin_url('admin.php?page=custom-messages&action=mark_as_read&id=' . $message->id) . '">标记为已读</a> |<a href="' . admin_url('admin.php?page=custom-messages&action=mark_as_replied&id=' . $message->id) . '">标记为已回</a> |<a href="' . admin_url('admin.php?page=custom-messages&action=delete&id=' . $message->id) . '">删除</a></td>';echo '</tr>';}echo '</tbody>';echo '</table>';echo '</div>';
}

5. 处理留言管理操作

在functions.php中添加代码来处理留言管理操作(标记为已读、标记为已回、删除):

function handle_custom_messages_actions() {if (isset($_GET['action']) && isset($_GET['id'])) {global $wpdb;$table_name = $wpdb->prefix . 'custom_messages';$id = intval($_GET['id']);if ($_GET['action'] == 'mark_as_read') {$wpdb->update($table_name, array('status' => '已读'), array('id' => $id));} elseif ($_GET['action'] == 'mark_as_replied') {$wpdb->update($table_name, array('status' => '已回'), array('id' => $id));} elseif ($_GET['action'] == 'delete') {$wpdb->delete($table_name, array('id' => $id));}wp_redirect(admin_url('admin.php?page=custom-messages'));exit;}
}
add_action('admin_init', 'handle_custom_messages_actions');

6. 样式和脚本

你可以根据需要添加自定义样式和脚本来美化表单和管理页面。

原文

http://www.shadahan.com/jianzhan/7806.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28983.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件&#xff0c;帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件&#xff1a; ——————按钮 Button&#xff1a;基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答&#xff1a;基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁&#xff1a; 马谡 知识图谱&#xff1a;四大名著总共4个图谱 红楼梦图谱 …

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

大模型应用开发学习笔记

Huggingface 下载模型&#xff1a; model_dirr"G:\python_ws_g\code\LLMProject\session_4\day02_huggingface\transformers_test\model\uer\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021…

虚拟卡 WildCard (野卡) 保姆级开卡教程

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 本篇教程为 WildCard 的介绍以及开卡教学&#xff0c;要了解不同平台&#xff08;Grok、Talkatone 等&#xff09;的订阅方式请移步《订阅教程》分类 当我们想要充值国外平台会员时&#xff0c;一般都需要使…

C++实现3D(EasyX)详细教程

一、关于3D 我们看见&#xff0c;这两个三角形是相似的&#xff0c;因此计算很简单 若相对物体的方向是斜的&#xff0c;计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1&#xff1a;Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序&#xff0c;该应用程序包含一个水平进度条&#xff08;QSlider&#xff09;&#xff0c;并且需要通过多线程来更新进度条的值。请根据以下要求完成代码&#xff1a; 界面设计&#xff1a; 使用 QS…

【算法day2】无重复字符的最长子串 两数之和

无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …

XHR请求解密:抓取动态生成数据的方法

在如今动态页面大行其道的时代&#xff0c;传统的静态页面爬虫已无法满足数据采集需求。尤其是在目标网站通过XHR&#xff08;XMLHttpRequest&#xff09;动态加载数据的情况下&#xff0c;如何精准解密XHR请求、捕获动态生成的数据成为关键技术难题。本文将深入剖析XHR请求解密…

【漫话机器学习系列】121.偏导数(Partial Derivative)

偏导数&#xff08;Partial Derivative&#xff09;详解 1. 引言 在数学分析、机器学习、物理学和工程学中&#xff0c;我们经常会遇到多个变量的函数。这些函数的输出不仅取决于一个变量&#xff0c;而是由多个变量共同决定的。那么&#xff0c;当其中某一个变量发生变化时&…

[C语言日寄] 字符串操作函数的使用及其拓展

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

ssm_mysql_暖心家装平台

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

地下井室可燃气体监测装置:守护地下安全,防患于未“燃”!

在城市的地下&#xff0c;隐藏着无数的燃气管道和井室&#xff0c;它们是城市基础设施建设的重要部分&#xff0c;燃气的使用&#xff0c;给大家的生活提供了极大的便利。在便利生活的背后&#xff0c;也存在潜在的城市安全隐患。 近年来&#xff0c;地下井室可燃气体泄漏事故…

EasyCVR平台赋能农业产业园:AIoT驱动的视频监控与大数据分析解决方案

随着现代农业的快速发展&#xff0c;农业产业园区的规模不断扩大&#xff0c;管理复杂度也随之增加。为了提高农业生产效率、保障农产品质量安全、实现精细化管理和智能化运营&#xff0c;视频信息化建设成为现代农业产业园的重要发展方向。EasyCVR作为一款功能强大的视频监控与…

【三维生成】StarGen:基于视频扩散模型的可扩展的时空自回归场景生成

标题&#xff1a;《StarGen: A Spatiotemporal Autoregression Framework with Video Diffusion Model for Scalable and Controllable Scene Generation》 项目&#xff1a;https://zju3dv.github.io/StarGen 来源&#xff1a;商汤科技、浙大CAD、Tetras.AI 文章目录 摘要一、…

STM32 进阶 定时器

在stm32中定时器大概分为4类 1、系统定时器&#xff1a;属于arm内核&#xff0c;内嵌在NVIC中 2、高级定时器&#xff1a;可以用来刹车和死区 3、通用定时器&#xff1a;可以用来输出pwm方波 4、基本定时器&#xff1a;只能记数 系统定时器注意&#xff1a; 1、系统定时器…

day21-API(算法,lambda,练习)

常见的七种查找算法&#xff1a; ​ 数据结构是数据存储的方式&#xff0c;算法是数据计算的方式。所以在开发中&#xff0c;算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词&#xff0c;如果各位铁粉有疑惑&#xff0c;可以先看一下哥们后面录制的数据结构…