在Argon主题中增加友链自助提交功能
本文最后更新于256 天前,其中的信息可能已经过时,如有错误请发送邮件到[email protected]

添加自助友链提交功能

本项目的模板代码参考了不愿意做鱼的小鲸鱼的教程《自助友链申请实现》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');
  1. wordpress优化经历(三)——自助友链申请实现-腾讯云开发者社区-腾讯云 (tencent.com) ↩︎

评论

  1. 博主 置顶
    Windows Edge
    福建省福州市 联通
    9 月前
    2024-3-10 22:00:06

    如果站点启用了Redis插件,有很大概率导致链接刷不出来,并且貌似在批量审核的时候会无法正常修改数据库,导致批量审核失败,在设置-Redis中关闭“对象缓存”即可。

    • 博主
      小崽安
      Windows Edge
      福建省福州市 联通
      9 月前
      2024-3-10 23:13:17

      已通过刷新缓存代码修复

  2. 卫博生
    Macintosh Chrome
    北京市丰台区 教育网
    8 月前
    2024-3-13 13:21:53

    你修改了系统的文件,一旦升级WP,你的修改就丢失了~

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇