添加自助友链提交功能
本项目的模板代码参考了不愿意做鱼的小鲸鱼的教程《自助友链申请实现》1,在其基础上修改了部分数据库操作逻辑,增加了使用邮件来通知管理员有新申请的友链待审批的功能。
同时,自行增加了批量审核通过的功能。
建立“自助提交友链”模板
因为Argon主题的友链界面是使用短代码来引用的,没有专门的友链模板(貌似内嵌在function文件中),因此,首先需要建立“自助提交友链模板”。
打开Argon主题目录(路径:./wp-content/themes/argon),新建“auto-links.php”,打开“auto-links.php”,输入以下代码并保存:
<?php
/*
Template Name: Auto Application Links
* 提示:友情链接,需在链接管理后台审核
*/
?>
<?php
if( isset($_POST['blink_form']) && $_POST['blink_form'] == 'send'){
global $wpdb;
// 表单变量初始化
$link_name = isset( $_POST['blink_name'] ) ? trim(htmlspecialchars($_POST['blink_name'], ENT_QUOTES)) : '';
$link_url = isset( $_POST['blink_url'] ) ? trim(htmlspecialchars($_POST['blink_url'], ENT_QUOTES)) : '';
$link_description = isset( $_POST['blink_description'] ) ? trim(htmlspecialchars($_POST['blink_description'], ENT_QUOTES)) : ''; // 简介
$link_image = isset( $_POST['blink_image'] ) ? trim(htmlspecialchars($_POST['blink_image'], ENT_QUOTES)) : ''; // 图像链接
/*$link_image = '图片链接:'.$_POST['blink_image']."\n".'简介:'.$_POST['blink_description']; */
$link_rss = isset( $_POST['blink_rss'] ) ? trim(htmlspecialchars($_POST['blink_rss'], ENT_QUOTES)) : '';
$link_target = "_blank";
$link_visible = "N"; // 表示链接默认不可见
// 表单项数据验证
if ( empty($link_name) || mb_strlen($link_name) > 30 ) {
wp_die('必须填写网站名称,且长度不得超过30字');
}
if ( empty($link_url) || strlen($link_url) > 100 /*|| !preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $link_url)*/) {
//验证url
wp_die('必须填写链接地址');
}
if ( empty($link_image) || strlen($link_image) > 100 ) {
//验证url
wp_die('必须填写站点Logo地址');
}
$sql_link = $wpdb->insert(
$wpdb->links,
array(
'link_name' => '【待审核】--- '.$link_name,
'link_url' => $link_url,
'link_target' => $link_target,
'link_image' => $link_image,
'link_description' => $link_description,
'link_rss' => $link_rss,
'link_visible' => $link_visible
)
);
$result = $wpdb->get_results($sql_link);
// 定义接收邮件的邮箱地址和邮件主题
$admin_email = get_option( 'admin_email' ); // 获取管理员邮箱
$subject = '新提交的友情链接等待审核';
// 检查是否成功插入记录
if ($sql_link) {
// 准备邮件内容
$message = "有新的友情链接等待审核:\n";
$message .= "网站名称: " . $link_name . "\n";
$message .= "链接地址: " . $link_url . "\n";
$message .= "站点Logo地址: " . $link_image . "\n";
$message .= "简介: " . $link_description . "\n";
$message .= "RSS地址: " . $link_rss . "\n";
// 发送邮件通知
$headers = 'From: Website Link Submission <'.$admin_email.'>' . "\r\n"; // 发送者信息
wp_mail($admin_email, $subject, $message, $headers);
// 输出提示信息
wp_die('友情链接已成功提交,【等待站长审核ing】!<a href="/neighbors">点此返回</a>', '提交成功');
//刷新Redis缓存,确保后台能够正常显示待审核链接
wp_cache_flush();
} else {
// 插入失败处理
wp_die('友情链接提交失败,请稍后再试!');
}
//wp_die('友情链接已成功提交,【等待站长审核ing】!<a href="/neighbors">点此返回</a>', '提交成功');
}
get_header();
?>
<div class="page-information-card-container"></div>
<?php get_sidebar(); ?>
<div id="primary" class="content-area content content-link-application form-header">
<main id="main" class="site-main" role="main">
<?php if(function_exists('cmp_breadcrumbs')) cmp_breadcrumbs();?>
<?php if (have_posts()) : while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/content', 'applylinks' );
/** * 关闭分享按钮
if (get_option("argon_show_sharebtn") != 'false') {
get_template_part( 'template-parts/share' );
}*/
if (comments_open() || get_comments_number()) {
comments_template();
}
?>
<?php endwhile; else:
endif; ?>
<?php get_footer(); ?>
打开argon主题目录里的template-parts文件夹(路径:./wp-content/themes/argon/template-parts),新建文件“content-applylinks.php”,打开“content-applylinks.php”输入下面的代码:
<article class="post post-full card bg-white shadow-sm border-0" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="post-header text-center<?php if (argon_has_post_thumbnail() && get_option('argon_show_thumbnail_in_banner_in_content_page') != 'true'){echo " post-header-with-thumbnail";}?>">
<?php
if (argon_has_post_thumbnail() && get_option('argon_show_thumbnail_in_banner_in_content_page') != 'true'){
$thumbnail_url = argon_get_post_thumbnail();
echo "<img class='post-thumbnail' src='" . $thumbnail_url . "'></img>";
echo "<div class='post-header-text-container'>";
}
if (argon_has_post_thumbnail() && get_option('argon_show_thumbnail_in_banner_in_content_page') == 'true'){
$thumbnail_url = argon_get_post_thumbnail();
echo "
<style>
body section.banner {
background-image: url(" . $thumbnail_url . ") !important;
}
</style>";
}
?>
<a class="post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<div class="post-meta">
<?php
$metaList = explode('|', get_option('argon_article_meta', 'time|views|comments|categories'));
if (is_sticky() && is_home() && ! is_paged()){
array_unshift($metaList, "sticky");
}
if (post_password_required()){
array_unshift($metaList, "needpassword");
}
if (is_meta_simple()){
array_remove($metaList, "time");
array_remove($metaList, "edittime");
array_remove($metaList, "categories");
array_remove($metaList, "author");
}
if (count(get_the_category()) == 0){
array_remove($metaList, "categories");
}
for ($i = 0; $i < count($metaList); $i++){
if ($i > 0){
echo ' <div class="post-meta-devide">|</div> ';
}
echo get_article_meta($metaList[$i]);
}
?>
<?php if (!post_password_required() && get_option("argon_show_readingtime") != "false" && is_readingtime_meta_hidden() == False) {
echo get_article_reading_time_meta(get_the_content());
} ?>
</div>
<?php
if (has_post_thumbnail() && get_option('argon_show_thumbnail_in_banner_in_content_page') != 'true'){
echo "</div>";
}
?>
</header>
<div class="post-content" id="post_content">
<?php
global $post_references, $post_reference_keys_first_index, $post_reference_contents_first_index;
$post_references = array();
$post_reference_keys_first_index = array();
$post_reference_contents_first_index = array();
the_content();
?>
<!--表单开始-->
<form method="post" class="mt20" action="<?php echo $_SERVER["REQUEST_URI"]; ?>" style="margin-bottom:20px; ">
<div class="form-group">
<label for="blink_name"><font color="blue">*</font> 网站名称:</label>
<input type="text" size="40" value="" class="form-control" id="blink_name" placeholder="例如:并非正文" name="blink_name" />
</div>
<div class="form-group">
<label for="blink_url"><font color="blue">*</font> 网站链接:</label>
<input type="text" size="40" value="" class="form-control" id="blink_url" placeholder="请输入带http://或https://的链接!" name="blink_url" />
</div>
<div class="form-group">
<label for="blink_image"><font color="blue">*</font> 站点Logo:</label>
<input type="text" size="40" value="" class="form-control" id="blink_image" placeholder="请输入站点Logo地址" name="blink_image" />
</div>
<div class="form-group">
<label for="blink_description"> 描述:</label>
<input type="text" size="40" value="" class="form-control" id="blink_description" placeholder="请输入简介" name="blink_description" />
</div>
<div class="form-group">
<label for="blink_rss"> RSS地址:</label>
<input type="text" size="40" value="" class="form-control" id="blink_rss" placeholder="请输入RSS地址" name="blink_rss" />
</div>
<div>
<input type="hidden" value="send" name="blink_form" />
<button type="submit" class="btn btn-primary">提交申请</button>
<button type="reset" class="btn btn-default">重填</button>
(提示:带有<font color="blue">*</font>,表示必填项~)
</div>
</form>
<!--表单结束-->
</div>
<?php
$referenceList = get_reference_list();
if ($referenceList != ""){
echo $referenceList;
}
?>
<?php if (has_tag()) { ?>
<div class="post-tags">
<i class="fa fa-tags" aria-hidden="true"></i>
<?php
$tags = get_the_tags();
foreach ($tags as $tag) {
echo "<a href='" . get_category_link($tag -> term_id) . "' target='_blank' class='tag badge badge-secondary post-meta-detail-tag'>" . $tag -> name . "</a>";
}
?>
</div>
<?php } ?>
</article>
修改友链管理界面
打开”link-manager.php”文件(路径:./wp-admin/link-manager.php),找到”link-add.php”位置(第100行左右),在“link-add”这一行之后添加以下代码并保存:
<a href="link-add.php" class="page-title-action"><?php echo esc_html__( 'Add New Link' ); ?></a>
<!-- 自己添加 -->
<a href="/wp-admin/link-manager.php?s=待审核&action=-1&cat_id=0&action2=-1" class="page-title-action" style="color:#88b3d5;margin-left:5px;">查看待审核链接</a>
<!-- 自己添加 -->
新建自助提交页
新建页面,选择“Auto Application Links”模板,页面名称命名随意,可命名为“自助提交友链”。
在页面中输入以下内容(随意,看心情修改)
✔ 您的网站已稳定运行,且有一定的文章量;
自助提交友链 | 并非正文 (bfzw.top)
✔ 网站内容健康、积极向上、维护中国共产党的领导,凡内容污秽不堪、反动反共的都不会通过申请。
✔ 请在您的网站友情链接中增加本站信息。审核时,若未在您的站点中检测到本站链接,审核不予通过。
✔ 如果申请后,长时间未通过审核,有可能是博主太忙未看到,可以通过联系告知我,谢谢~
适当修改文章设置后发布页面。
新建/修改友链页
新建友链页,使用默认模板,建立简码段落,输入以下简码来显示友链信息:
[friendlinks /]
再换行插入“多个按钮”,并且命名为“申请友链”,为按钮添加超链接,链接刚才建立的“自助提交友链”的网址,通过再按钮上建立超链接,使按钮能够进入到提交友链的界面,适当修改文章设置后即可发布。
友链页的整体效果如下:
最后,将友链页的访问链接修改为neighbors,否则提交友链信息后,无法返回友链页。
实现批量审批功能
打开Argon主题的”function.php“文件(路径:./),输入以下代码并保存:
/** * 为链接管理页面添加 审核通过 批量操作 */
function add_appr_links_action($actions) {
// 检查当前页面是否为链接管理页面
//global $pagenow;
/*'link-manager.php' === $pagenow && */
if (current_user_can('manage_links')) {
// 添加 审核通过 的批量操作选项
$actions['approve_links'] = '审核通过';
}
return $actions;
}
add_filter('bulk_actions-link-manager', 'add_appr_links_action');
/** * 处理 审核通过 的批量操作 */
function handle_appr_links_action($redirect_to, $doaction, $bulklinks) {
global $wpdb;
// 检查是否为自定义的 审核通过 操作
if ('approve_links' === $doaction && current_user_can('manage_links')) {
//刷新Redis缓存,确保正常审核
usleep(500000);
wp_cache_flush();
foreach ($bulklinks as $link_id) {
$link_id = (int) $link_id;
// 获取链接详情
$bookmark = get_bookmark($link_id);
if ($bookmark && strpos($bookmark->link_name, '【待审核】--- ') !== false) {
// 更新链接名称,删除“【待审核】--- ”
$new_name = str_replace('【待审核】--- ', '', $bookmark->link_name);
// 更新链接名称
wp_update_link(array(
'link_id' => $link_id,
'link_name' => $new_name,
'link_visible' => 'Y' // 设置为公开
));
// 更新链接名称和状态
//$wpdb->update($wpdb->links, array('link_name' => $new_name), array('link_id' => $link_id));
// 控制链接的可见性
//$wpdb->update($wpdb->links, array('link_visible' => 'Y'), array('link_id' => $link_id));
}
}
// 通知管理员链接已被审核通过
$redirect_to = add_query_arg('approved', count($bulklinks), $redirect_to);
}
return $redirect_to;
}
add_filter('handle_bulk_actions-link-manager', 'handle_appr_links_action', 10, 3);
/** *添加批量通过后的提示 */
function show_appr_links_action_message() {
global $pagenow;
if ('link-manager.php' == $pagenow && isset($_REQUEST['approved'])) {
//审核通过
$approved = (int) $_REQUEST['approved'];
/* translators: %s: Number of links. */
$approved_message = sprintf( _n( '%s link approved.', '%s links approved.', $approved ), $approved );
wp_admin_notice(
$approved_message,
array(
'id' => 'message',
'additional_classes' => array( 'updated' ),
'dismissible' => true,
)
);
$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'approved' ), $_SERVER['REQUEST_URI'] );
}
}
add_action('admin_notices', 'show_appr_links_action_message');
如果站点启用了Redis插件,有很大概率导致链接刷不出来,并且貌似在批量审核的时候会无法正常修改数据库,导致批量审核失败,在设置-Redis中关闭“对象缓存”即可。
已通过刷新缓存代码修复
你修改了系统的文件,一旦升级WP,你的修改就丢失了~