首页 > CMS教程 > &#&按 > 将验证验与WordPress注释表格集成

将验证验与WordPress注释表格集成

尊渡假赌尊渡假赌尊渡假赌
发布: 2025-02-18 10:32:38
原创
742 人浏览过

将验证验与WordPress注释表格集成

钥匙要点

  • >将验证码与WordPress评论表格集成可以阻止bot提交垃圾邮件评论,节省用于调节和删除这些评论的时间和资源。
  • >
  • >教程演示了如何在插件中使用WordPress HTTP API,将其他表单字段添加到WordPress评论表单中,并验证和利用添加到自定义字段的值。
  • >
  • >如果验证码符号为空,或者用户未能使挑战失败,则在教程中开发的验证码插件包含一个错误消息。它还删除了提交的任何评论,使验证码挑战赛失败。
  • >
  • >教程强调了WordPress评论系统的多功能性,允许用户在注释表格中添加额外的表单字段并通过提到的过滤器和操作来实现任何所需的功能。
  • 多年来,WordPress由于垃圾邮件发送者的越来越受欢迎而成为垃圾邮件发送者的目标。 不幸的是,存在自动化软件的目的是爬网,以搜索使用任何流行平台(例如WordPress)构建的网站,并提交数百甚至数千个垃圾邮件评论。垃圾邮件评论非常烦人,他们在调节和删除它们方面消耗了我们宝贵的时间。
我知道您和我一样讨厌垃圾邮件评论,很想知道如何与他们作战。阻止机器人提交垃圾邮件评论的一种方法是将验证码整合到评论表格上。

在以前的教程中,我们学会了如何将验证码整合到WordPress登录和注册表格中。

>

>以类似的方式,我们现在将通过如何将验证码与WordPress注释系统集成。

> WordPress插件中有许多验证码插件,例如WP-Recaptcha和SecureMimage-WP-Fixed。

本教程的目的是不要创建另一个CAPTCHA插件,而是:>

演示如何在插件中使用WordPress HTTP API。

>如何将其他表单字段包括在WordPress评论表单中。

>

>如何验证和利用添加到自定义字段的值。>

>不进一步的ADO,让我们从插件开发开始。
    >
  1. 插件开发
  2. >首先,前往重新捕获,注册您的域名并抓住您的公共和私人API键。
  3. 包括插件标头。

>创建一个具有三个属性的类,这些属性将存储Recaptcha的私钥和公钥以及验证码错误消息(当验证码表格为空并且用户失败时,会生成错误)。

>

类魔术构造方法将包含两对动作和过滤钩。

>代码说明:首先,我的recaptcha公共密钥和私钥都保存到其类属性。

>将输出recaptcha挑战的CATTCHA_DISPLAY()方法通过comment_form Action添加到注释表格中。

> wp_head操作包括回调函数delete_failed_captcha_comment(),将删除提交的任何评论,以使验证码失败。

过滤器preprocess_comment调用validate_captcha_field()方法,以确保验证码字段不留空并且答案是正确的。

>过滤器remand_post_redirect调用redirect_fail_captcha_comment()以在注释重定向URL中添加一些查询参数。

这是Catcha_display()的代码,它将输出Catpcha挑战。

>此外,它检查当前页URL是否附加了一个查询字符串,并根据redirect_fail_captcha_comment()

设置的$ _get ['catcha']的值显示适当的错误消息。

> validate_captcha_field()的名称意味着通过确保验证码字段没有空且提供的答案是正确的。
<span><span><?php
</span></span><span>
</span><span><span>/*
</span></span><span><span>Plugin Name: Add reCAPTCHA to comment form
</span></span><span><span>Plugin URI: https://www.sitepoint.com
</span></span><span><span>Description: Add Google's reCAPTCHA to WordPress comment form
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Agbonghama Collins
</span></span><span><span>Author URI: http://w3guy.com
</span></span><span><span>License: GPL2
</span></span><span><span>*/</span></span>
登录后复制
<span>class Captcha_Comment_Form {
</span>
	<span>/** <span>@type string private key|public key */</span>
</span>	<span>private $public_key, $private_key;
</span>
	<span>/** <span>@type string captcha errors */</span>
</span>	<span>private static $captcha_error;</span>
登录后复制
>让我们仔细看看validate_captcha_field(),特别是elseif条件语句,呼叫recaptcha_response()以检查验证码的答案是否正确。

>

以下是recaptcha_response()的代码。
<span>/** class constructor */
</span>	<span>public function __construct() {
</span>
		<span>$this->public_key  = '6Le6d-USAAAAAFuYXiezgJh6rDaQFPKFEi84yfMc';
</span>		<span>$this->private_key = '6Le6d-USAAAAAKvV-30YdZbdl4DVmg_geKyUxF6b';
</span>
		<span>// adds the captcha to the WordPress form
</span>		<span>add_action( 'comment_form', array( $this, 'captcha_display' ) );
</span>                
                <span>// delete comment that fail the captcha challenge
</span>		<span>add_action( 'wp_head', array( $this, 'delete_failed_captcha_comment' ) );
</span>
		<span>// authenticate the captcha answer
</span>		<span>add_filter( 'preprocess_comment', array( $this, 'validate_captcha_field' ) );
</span>
		<span>// redirect location for comment
</span>		<span>add_filter( 'comment_post_redirect', array( $this, 'redirect_fail_captcha_comment' ), 10, 2 );
</span>	<span>}</span>
登录后复制
>

允许我解释recaptcha_response()的工作方式。

>

>带有以下参数。
/** Output the reCAPTCHA form field. */
	public function captcha_display() {
		if ( isset( $_GET['captcha'] ) && $_GET['captcha'] == 'empty' ) {
			echo '<span><span><span><strong</span>></span>ERROR<span><span></strong</span>></span>: CAPTCHA should not be empty';
</span>		} elseif ( isset( $_GET['captcha'] ) && $_GET['captcha'] == 'failed' ) {
			echo '<span><span><span><strong</span>></span>ERROR<span><span></strong</span>></span>: CAPTCHA response was incorrect';
</span>		}

		echo <<<span><span><span><CAPTCHA_FORM</span>
</span></span><span>		<span><style type<span>='text/css'</span>></span><span><span><span>#submit</span> {
</span></span></span><span><span>				<span>display: none;
</span></span></span><span><span>			<span>}</span></span><span><span></style</span>></span>
</span>		<span><span><span><script</span> type<span>="text/javascript"</span>
</span></span><span>		        <span>src<span>="http://www.google.com/recaptcha/api/challenge?k=<span><?= $this->public_key; ?></span>"</span>></span><span>
</span></span><span><span>		</span><span><span></script</span>></span>
</span>		<span><span><span><noscript</span>></span>
</span>			<span><span><span><iframe</span> src<span>="http://www.google.com/recaptcha/api/noscript?k=<span><?= $this->public_key; ?></span>"</span>
</span></span><span>			        <span>height<span>="300"</span> width<span>="300"</span> frameborder<span>="0"</span>></span><span><span></iframe</span>></span>
</span>			<span><span><span><br</span>></span>
</span>			<span><span><span><textarea</span> name<span>="recaptcha_challenge_field"</span> rows<span>="3"</span> cols<span>="40"</span>></span>
</span>			<span><span><span></textarea</span>></span>
</span>			<span><span><span><input</span> type<span>="hidden"</span> name<span>="recaptcha_response_field"</span>
</span></span><span>			       <span>value<span>="manual_challenge"</span>></span>
</span>		<span><span><span></noscript</span>></span>
</span>

		<span><span><span><input</span> name<span>="submit"</span> type<span>="submit"</span> id<span>="submit-alt"</span> tabindex<span>="6"</span> value<span>="Post Comment"</span>/></span>
</span>CAPTCHA_FORM;

	}
登录后复制

privateKey:您的私钥

>

远程IP求解验证码的用户的IP地址。

挑战通过表单发送的的值。
  • >
  • 响应通过表格发送的
  • recaptcha_response_field
  • 的值。
  • >由表格发送的挑战和响应帖子数据分别捕获并保存到$挑战和$响应。 $ _server [“远程_ADDR”]捕获用户的IP地址,然后捕获到$ remote_ip。
  • > wordpress http api以阵列形式以下代码。>
  • recaptcha_post_request()是HTTP API的包装函数,它将接受邮政参数/正文,向recaptcha api提出请求,并返回True,如果通过验证码测试并通过false,则否则。

    >未通过验证码挑战或让字段空的用户发表的任何评论被delete_failed_captcha_comment()

    删除

    最后,我们关闭插件类。
    <span>/**
    </span><span>	 * Add query string to the comment redirect location
    </span><span>	 *
    </span><span>	 * <span>@param $location string location to redirect to after comment
    </span></span><span>	 * <span>@param $comment object comment object
    </span></span><span>	 *
    </span><span>	 * <span>@return <span>string</span>
    </span></span><span>	 */
    </span>	<span>function redirect_fail_captcha_comment( $location, $comment ) {
    </span>
    		<span>if ( ! empty( <span>self::</span>$captcha_error ) ) {
    </span>
    			<span>$args = array( 'comment-id' => $comment->comment_ID );
    </span>
    			<span>if ( <span>self::</span>$captcha_error == 'captcha_empty' ) {
    </span>				<span>$args['captcha'] = 'empty';
    </span>			<span>} elseif ( <span>self::</span>$captcha_error == 'challenge_failed' ) {
    </span>				<span>$args['captcha'] = 'failed';
    </span>			<span>}
    </span>
    			<span>$location = add_query_arg( $args, $location );
    </span>		<span>}
    </span>
    		<span>return $location;
    </span>	<span>}</span>
    登录后复制
    >

    我们完成了编码插件类的编码。要使课堂上班,我们需要像这样实例化:
    <span>/**
    </span><span>	 * Verify the captcha answer
    </span><span>	 *
    </span><span>	 * <span>@param $commentdata object comment object
    </span></span><span>	 *
    </span><span>	 * <span>@return <span>object</span>
    </span></span><span>	 */
    </span>	<span>public function validate_captcha_field( $commentdata ) {
    </span>
    		<span>// if captcha is left empty, set the self::$captcha_error property to indicate so.
    </span>		<span>if ( empty( $_POST['recaptcha_response_field'] ) ) {
    </span>			<span><span>self::</span>$captcha_error = 'captcha_empty';
    </span>		<span>}
    </span>
    		<span>// if captcha verification fail, set self::$captcha_error to indicate so
    </span>		<span>elseif ( $this->recaptcha_response() == 'false' ) {
    </span>			<span><span>self::</span>$captcha_error = 'challenge_failed';
    </span>		<span>}
    </span>
    		<span>return $commentdata;
    </span>	<span>}</span>
    登录后复制
    >

    在激活插件时,将在下面显示的WordPress注释表格中添加验证码。

    将验证验与WordPress注释表格集成

    总结

    在本教程的末尾,您应该能够在评论表格中添加额外的表单字段并实现您希望在评论系统中具有的任何功能,这要归功于提到的过滤器和操作。

    如果您想在WordPress网站上使用插件或深入研究代码,请从Github下载插件。

    直到我再次走,愉快的编码!

    >经常询问有关将验证验与WordPress注释表格集成的问题(常见问题解答)

    >将验证码与WordPress评论表单集成的重要性是什么?首先,它有助于防止垃圾邮件评论,这可能会使您的网站混乱并阻止真正的用户。其次,它增加了额外的安全性,保护您的网站免受机器人和自动脚本的影响。最后,它可以节省您的时间和资源,否则将花费在垃圾邮件评论中进行调节和删除。

    我如何在WordPress评论表单上自定义验证码?

    >在您的WordPress评论上自定义CAPTCHA表单可以通过您使用的验证码插件的设置来完成。大多数插件都提供了更改验证码的复杂性,设计和布局的选项。有些人甚至允许您创建自己的自定义验证码。

    > WordPress评论表单有其他替代方案吗?>是的,WordPress评论表单有几种替代方案。其中包括Akismet,垃圾邮件过滤服务和HoneyPot,一种方法可以通过与隐藏的形式字段进行交互来欺骗bot来揭示自己。

    >我可以在WordPress站点上的其他表单上使用CAPTCHA? 🎜>绝对。可以将CAPTCHA与WordPress站点上的任何表格集成,包括联系表,注册表格和登录表格。这提供了整个网站上的其他安全性和垃圾邮件的预防。

    >

    如果Catpcha在我的WordPress评论表单上不起作用,该怎么办?

    如果Catcha在您的WordPress评论表单上不工作,首先检查以确保插件已正确安装和激活。如果问题持续存在,请尝试清除浏览器缓存或禁用其他插件以查看是否存在冲突。

    >

    我如何使残疾用户更容易获得验证码?可访问,考虑使用音频验证码或基于逻辑的验证码,该验证码要求用户回答一个简单的问题。另外,请确保您的验证码插件符合Web内容可访问性指南(WCAG)。

    >

    验证验证是否有效,可以防止所有类型的垃圾邮件?

    ,而验证码在防止机器人生成的垃圾邮件方面非常有效,但它可能对人类生成的垃圾邮件不那么有效。为此,请考虑使用其他措施,例如评论审核或某些单词或IP地址。

    >是否会将验证码与WordPress注释形式集成到站点性能吗?

    >将CAPTCHA集成不应显着影响站点性能。但是,像任何插件一样,它确实使用了一些资源。如果您注意到放缓,请考虑使用轻巧的验证码插件或以其他方式优化网站的性能。

    我可以在没有插件的情况下将CAPTCHA与WordPress注释表单集成在一起?可以将CAPTCHA与无插件的WordPress注释表单集成在一起,它需要高级编码知识,并且不建议大多数用户使用。使用插件简化了该过程,并确保正确实现了验证码。

    >

    >我应该多久更新一次验证码插件?

    建议每当发布新版本时,建议更新您的验证码插件。这样可以确保您具有最新的安全功能,并且该插件与最新版本的WordPress保持兼容。

    以上是将验证验与WordPress注释表格集成的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板