一直想要一个WordPress订阅插件,可以让用户输入邮箱,订阅网站。然后,我需要自己的服务器接管整个订阅,包括文章推送功能,不太想要那些对接其他平台的插件。今天,我就试着让Open Ai旗下的ChatGPT开发一个WordPress订阅插件。聊了很久,提了很多需求。ChatGPT有他好的地方,也有他表现不足的地方。
过程太长,本文就简短的给出聊天过程,包括代码,至于后面的ChatGPT调教,可能会在后面文章中给出。总之,刚开始很满意,越聊越闹心。
下面正式开始,古哥表示我,ChatGPT代表Open Ai旗下的人工智能ChatGPT。
构造订阅插件
古哥:
写一个WordPress邮件订阅插件
ChatGPT:
好的,下面是一个简单的WordPress邮件订阅插件,它将允许用户输入他们的电子邮件地址,然后将其添加到您选择的电子邮件列表中。
首先,您需要创建一个名为”subscribe-me”的文件夹,并在其中创建两个文件,一个名为”subscribe-me.php”,另一个名为”subscribe-me.js”。然后将下面的代码复制到相应的文件中。
subscribe-me.php:
<?php
/*
Plugin Name: Subscribe Me
Description: A simple WordPress plugin to allow users to subscribe to your email list.
Version: 1.0
Author: Your Name
Author URI: https://yourwebsite.com
*/
// Register the plugin's shortcode
add_shortcode( 'subscribe_me', 'subscribe_me_shortcode' );
// Enqueue the plugin's JavaScript file
add_action( 'wp_enqueue_scripts', 'subscribe_me_scripts' );
function subscribe_me_shortcode() {
// Output the HTML for the subscribe form
$output = '<form id="subscribe-me-form" action="" method="post">';
$output .= '<label for="subscribe-me-email">Enter your email address to subscribe:</label>';
$output .= '<input type="email" id="subscribe-me-email" name="subscribe_me_email" required />';
$output .= '<button type="submit">Subscribe</button>';
$output .= '</form>';
return $output;
}
function subscribe_me_scripts() {
// Enqueue the plugin's JavaScript file
wp_enqueue_script( 'subscribe-me', plugin_dir_url( __FILE__ ) . 'subscribe-me.js', array( 'jquery' ), '1.0', true );
}
subscribe-me.js:
jQuery( document ).ready( function( $ ) {
// Submit the subscribe form via AJAX
$( '#subscribe-me-form' ).on( 'submit', function( event ) {
event.preventDefault();
// Get the email address from the form input
var email = $( '#subscribe-me-email' ).val();
// Send the email address to the server via AJAX
$.post( ajaxurl, {
action: 'subscribe_me',
email: email
}, function( response ) {
// Display a success message to the user
alert( 'Thank you for subscribing!' );
} );
} );
} );
在上述代码中,我们首先注册了一个名为”subscribe_me”的简码(shortcode),然后定义了一个名为”subscribe_me_shortcode”的函数,它将返回一个包含订阅表单的HTML代码。我们还定义了一个名为”subscribe_me_scripts”的函数,用于将我们的JavaScript文件注册到WordPress的脚本队列中。
我们的JavaScript文件使用jQuery来捕获订阅表单的提交事件,并使用jQuery.post()方法将用户的电子邮件地址发送到服务器。在服务器端,我们将定义一个名为”subscribe_me”的动作(action),它将接收用户的电子邮件地址,并将其添加到您选择的电子邮件列表中。这部分的代码可以在您的主题的functions.php文件中进行编写,如下所示:
<?php
// Add the "subscribe_me" AJAX action
add_action( 'wp_ajax_subscribe_me', 'subscribe_me_ajax' );
add_action( 'wp_ajax_nopriv_subscribe_me', 'subscribe_me_ajax' );
function
很明显,上面的代码并没有完整写完
古哥:
继续
ChatGPT:
subscribe_me_ajax() 函数:
Ai竟然没注意到自己上一个文件代码没有完整列出
function subscribe_me_ajax() {
// Get the user's email address from the AJAX request
$email = $_POST['email'];
// Add the email address to your email list
// Code to add the email to your list goes here
// Send a success response back to the browser
wp_send_json_success();
}
现在您已经拥有了一个简单的WordPress邮件订阅插件!只需将”subscribe_me”简码添加到任何帖子或页面中即可显示订阅表单。
请注意,本插件只是一个简单的示例,并不包含实际添加电子邮件地址到您的电子邮件列表的代码。您需要使用您选择的电子邮件服务提供商的API或插件,或手动将电子邮件地址添加到您的列表中。
此外,为了确保安全性和可靠性,您还需要进行适当的错误检查和验证。
订阅邮箱保存到数据库
古哥:
我需要将已订阅用户的邮箱保存到数据库中
ChatGPT:
好的,下面是一个更新的代码,它将允许您将已订阅用户的电子邮件地址保存到WordPress的数据库中。
首先,您需要创建一个名为”subscribe-me”的文件夹,并在其中创建两个文件,一个名为”subscribe-me.php”,另一个名为”subscribe-me.js”。然后将下面的代码复制到相应的文件中。
subscribe-me.php:
<?php
/*
Plugin Name: Subscribe Me
Description: A simple WordPress plugin to allow users to subscribe to your email list.
Version: 1.0
Author: Your Name
Author URI: https://yourwebsite.com
*/
// Register the plugin's shortcode
add_shortcode( 'subscribe_me', 'subscribe_me_shortcode' );
// Enqueue the plugin's JavaScript file
add_action( 'wp_enqueue_scripts', 'subscribe_me_scripts' );
// Create the subscription database table on plugin activation
register_activation_hook( __FILE__, 'subscribe_me_create_table' );
function subscribe_me_shortcode() {
// Output the HTML for the subscribe form
$output = '<form id="subscribe-me-form" action="" method="post">';
$output .= '<label for="subscribe-me-email">Enter your email address to subscribe:</label>';
$output .= '<input type="email" id="subscribe-me-email" name="subscribe_me_email" required />';
$output .= '<button type="submit">Subscribe</button>';
$output .= '</form>';
return $output;
}
function subscribe_me_scripts() {
// Enqueue the plugin's JavaScript file
wp_enqueue_script( 'subscribe-me', plugin_dir_url( __FILE__ ) . 'subscribe-me.js', array( 'jquery' ), '1.0', true );
// Pass the AJAX URL to the JavaScript file
wp_localize_script( 'subscribe-me', 'subscribe_me_ajax', array(
'ajax_url' => admin_url( 'admin-ajax.php' )
) );
}
function subscribe_me_create_table() {
// Create the subscription database table
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
email varchar(100) NOT NULL,
timestamp datetime NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
subscribe-me.js:
jQuery( document ).ready( function( $ ) {
// Submit the subscribe form via AJAX
$( '#subscribe-me-form' ).on( 'submit', function( event ) {
event.preventDefault();
// Get the email address from the form input
var email = $( '#subscribe-me-email' ).val();
// Send the email address to the server via AJAX
$.post( subscribe_me_ajax.ajax_url, {
action: 'subscribe_me',
email: email
}, function( response ) {
// Display a success message to the user
alert( 'Thank you for subscribing!' );
} );
} );
} );
在上述代码中,我们添加了一个新的函数”subscribe_me_create_table()”,它将在插件激活时创建一个名为”wp_prefix_subscriptions”的数据库表,用于保存已订阅用户的电子邮件地址和订
古哥:
继续
ChatGPT:
阅时间戳。该函数使用了WordPress的全局变量$wpdb,这是一个用于访问WordPress数据库的对象。
我们还更新了”subscribe_me_ajax()”函数,以将电子邮件地址保存到数据库中:
function subscribe_me_ajax() {
// Get the user's email address from the AJAX request
$email = $_POST['email'];
// Get the current timestamp
$timestamp = current_time( 'mysql' );
// Add the email address to the subscription table
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
$data = array(
'email' => $email,
'timestamp' => $timestamp
);
$format = array(
'%s',
'%s'
);
$wpdb->insert( $table_name, $data, $format );
// Send a success response back to the browser
wp_send_json_success();
}
在上面的代码中,我们使用$wpdb对象将电子邮件地址和时间戳插入到”wp_prefix_subscriptions”表中。注意,我们使用了WordPress内置的”current_time()”函数来获取当前时间戳。
最后,在插件的主文件”subscribe-me.php”中,我们还需要将”subscribe_me_ajax()”函数注册为一个AJAX处理程序:
add_action( 'wp_ajax_subscribe_me', 'subscribe_me_ajax' );
add_action( 'wp_ajax_nopriv_subscribe_me', 'subscribe_me_ajax' );
现在,每当用户在订阅表单中输入他们的电子邮件地址并提交表单时,插件都会将电子邮件地址和时间戳保存到数据库中。您可以使用$wpdb对象查询该表格,并在需要时使用已订阅用户的电子邮件地址发送电子邮件。
每天定时推送最新文章
古哥:
如果网站有更新的话,每天0点向这些电子邮件发送最新的文章
ChatGPT:
要实现这个功能,您需要编写一个函数,它将查询数据库以获取已订阅用户的电子邮件地址,并将最新的文章发送给他们。
首先,让我们编写一个函数,该函数将查询数据库以获取最新的文章:
function get_latest_post() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 1
);
$latest_post = get_posts( $args );
return $latest_post[0];
}
上面的函数将查询发布状态的最新文章,并按发布日期降序排列。它还限制结果集大小为1,因此它只返回最新的文章。
现在,让我们编写一个函数,该函数将查询订阅表格并将最新文章发送给每个订阅者:
function send_latest_post_to_subscribers() {
// Get the latest post
$latest_post = get_latest_post();
// Get the list of subscribers
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
$subscribers = $wpdb->get_results( "SELECT email FROM $table_name" );
// Send the latest post to each subscriber
foreach ( $subscribers as $subscriber ) {
$to = $subscriber->email;
$subject = 'Latest post from My Blog';
$body = 'Check out our latest post: ' . $latest_post->post_title . ' - ' . get_permalink( $latest_post->ID );
wp_mail( $to, $subject, $body );
}
}
上面的函数首先调用”get_latest_post()”函数以获取最新的文章,然后查询订阅表以获取电子邮件地址列表。最后,它使用”wp_mail()”函数将最新文章发送给每个订阅者。
最后,我们可以使用WordPress内置的”wp_schedule_event()”函数,将”send_latest_post_to_subscribers()”函数定期执行。在这种情况下,我们将每天将其调用一次,时间为0:00:
add_action( 'wp', 'setup_latest_post_cron_job' );
function setup_latest_post_cron_job() {
if ( ! wp_next_scheduled( 'send_latest_post_to_subscribers' ) ) {
wp_schedule_event( strtotime( 'midnight' ), 'daily', 'send_latest_post_to_subscribers' );
}
}
上面的代码在WordPress加载时运行,使用”wp_next_scheduled()”函数检查是否已安排了名为”send_latest_post_to_subscribers”的定期事件。如果没有,则使用”wp_schedule_event()”函数安排它,以便每天0:00调用”send_latest_post_to_subscribers()”函数。
现在,您的插件将每天将最新文章发送给所有已订阅用户的电子邮件地址。
文章推送状态获取
古哥:
我需要知道这些用户是否查看过文章的推送
ChatGPT:
如果您希望追踪哪些已订阅用户已经查看了最新文章的推送,您需要在插件中创建一个新的数据表来存储这些信息。在这个新的数据表中,您需要为每个已订阅用户存储一个记录,用于追踪他们是否查看了最新文章的推送。
在新的数据表中,您需要包含以下列:
id
– 用于唯一标识每个订阅者的IDemail
– 订阅者的电子邮件地址post_id
– 最新文章的IDviewed
– 一个布尔值,表示订阅者是否查看了推送
在您的插件中,您需要编写代码来添加新的订阅者记录,并将其标记为未查看。这可以在subscribe()
函数中完成,如下所示:
function subscribe( $email ) {
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
// Check if the subscriber already exists
$subscriber = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table_name WHERE email = %s", $email ) );
if ( $subscriber ) {
return;
}
// Add the new subscriber
$wpdb->insert( $table_name, array( 'email' => $email, 'post_id' => null, 'viewed' => false ) );
}
上面的代码将添加一个新的订阅者记录,其中post_id
列的值为NULL,viewed
列的值为false,表示订阅者还没有查看推送。
当新文章推送给订阅者时,您需要编写代码来更新新记录的post_id
列,将其设置为新文章的ID。这可以在send_latest_post_to_subscribers()
函数中完成,如下所示:
function send_latest_post_to_subscribers() {
// Get the latest post
$latest_post = get_latest_post();
// Get the list of subscribers
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
$subscribers = $wpdb->get_results( "SELECT * FROM $table_name" );
// Send the latest post to each subscriber
foreach ( $subscribers as $subscriber ) {
$to = $subscriber->email;
$subject = 'Latest post from My Blog';
$body = 'Check out our latest post: ' . $latest_post->post_title . ' - ' . get_permalink( $latest_post->ID );
wp_mail( $to, $subject, $body );
// Update the subscriber record
$wpdb->update( $table_name, array( 'post_id' => $latest_post->ID ), array( 'id' => $subscriber->id ) );
}
}
上面的代码将使用wpdb->update()
函数来更新每个订阅者记录的post_id
列。
最后,当订阅者查看推送并点击文章链接时,您需要编写代码来将订阅者记录中的viewed
列设置为true。这可以在view_post()
函数中完成,如下所示:
古哥:
继续
ChatGPT:
function view_post( $email, $post_id ) {
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
// Get the subscriber record
$subscriber = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table_name WHERE email = %s", $email ) );
// Check if the subscriber has already viewed the post
if ( $subscriber->post_id == $post_id && $subscriber->viewed == true ) {
return;
}
// Update the subscriber record
$wpdb->update( $table_name, array( 'viewed' => true ), array( 'id' => $subscriber->id ) );
}
上面的代码将使用wpdb->update()
函数来更新订阅者记录中的viewed
列。请注意,此函数还将检查是否已经更新过该文章的记录以及订阅者是否已经查看了该文章,以避免重复更新记录。
通过这些代码,您将能够追踪哪些订阅者已经查看了最新文章的推送,并将其标记为已查看。
最后,我又让ChatGPT给出了完整的文件列表及所有文件的代码,但是文件并没有经过我的验证是否可以使用。总之,这里就是给各位提供一个思路。后面,我或许会继续这部分内容,发布新的文章。本文列出的代码不足聊天记录的五分之一。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/4139.html
评论列表(2条)
弱弱的问一下,这个插件做好了的话,可不可以发我一份?可付费。
@九尾狐昊月:测试了下,不能发邮件,不了了之了。后面,看情况继续写吧