Rumah >Tutorial CMS >WordTekan >Mengintegrasikan Captcha dengan Borang Komen WordPress

Mengintegrasikan Captcha dengan Borang Komen WordPress

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2025-02-18 10:32:38754semak imbas

Mengintegrasikan Captcha dengan Borang Komen WordPress

Takeaways Key

Saya tahu anda membenci komen spam seperti yang saya lakukan dan ingin tahu bagaimana untuk memerangi mereka. Salah satu cara menghalang bot dari mengemukakan komen spam adalah dengan mengintegrasikan captcha ke borang komen.

Dalam tutorial sebelumnya, kami belajar bagaimana mengintegrasikan Captchas ke borang log masuk dan pendaftaran WordPress.

Dalam fesyen yang sama, kami akan berjalan melalui cara mengintegrasikan CAPTCHA dengan sistem komen WordPress.

Terdapat banyak plugin CAPTCHA yang terdapat dalam direktori plugin WordPress seperti WP-Recaptcha dan Securimage-WP-Fixed.

Tujuan tutorial ini adalah untuk tidak membuat plugin Captcha yang lain tetapi:

Tunjukkan bagaimana API HTTP WordPress boleh digunakan dalam plugin.

bagaimana memasukkan medan borang tambahan ke borang komen WordPress.
  1. bagaimana untuk mengesahkan dan menggunakan nilai yang ditambahkan ke medan tersuai.
  2. Tanpa berlengah lagi, mari kita mulakan dengan pembangunan plugin.
  3. Pembangunan plugin

Pertama, pergi ke Recaptcha, daftar nama domain anda dan ambil kunci API awam dan swasta anda.

Sertakan tajuk plugin.

Buat kelas dengan tiga sifat yang akan menyimpan kunci peribadi & awam Recaptcha serta mesej ralat CAPTCHA (ralat dihasilkan apabila borang CAPTCHA dibiarkan kosong dan pengguna gagal cabaran).

Kaedah Pembina Magic Kelas akan mengandungi dua pasang tindakan dan cangkuk penapis.
<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>

Kod Penjelasan: Pertama, kunci awam dan peribadi saya diselamatkan ke sifat kelas mereka.
<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>

kaedah captcha_display () yang akan mengeluarkan cabaran recaptcha ditambah ke borang komen oleh tindakan Comment_Form.

Tindakan WP_HEAD termasuk fungsi panggil balik delete_failed_captcha_comment () yang akan memadamkan sebarang komen yang dikemukakan yang gagal cabaran CAPTCHA.

preprocess_comment penapis memanggil kaedah validate_captcha_field () untuk memastikan medan CAPTCHA tidak dibiarkan kosong dan juga jawapannya.

penapis COMMENT_POST_REDIRECT CALL REDIRECT_FAIL_CAPTCHA_COMMENT () untuk menambah beberapa parameter pertanyaan ke url pengalihan komen.

di sini adalah kod untuk captcha_display () yang akan mengeluarkan cabaran captcha.

Selain itu, periksa jika terdapat rentetan pertanyaan yang dilampirkan pada url halaman semasa dan paparkan mesej ralat yang sesuai bergantung pada nilai $ _get ['captcha'] yang ditetapkan oleh redirect_fail_captcha_comment ()

<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>
kaedah validate_captcha_field () sebagai namanya menunjukkan untuk mengesahkan jawapan CAPTCHA dengan memastikan medan CAPTCHA tidak dibiarkan kosong dan jawapan yang dibekalkan adalah betul.

<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>
Mari kita lihat lebih dekat pada validate_captcha_field (), khususnya pernyataan bersyarat lain, panggilan dibuat untuk recaptcha_response () untuk memeriksa sama ada jawapan CAPTCHA adalah betul.

di bawah adalah kod untuk 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;

	}
izinkan saya menerangkan bagaimana recaptcha_response () berfungsi.

Permintaan pos dihantar ke titik akhir http://www.google.com/recaptcha/api/verify dengan parameter berikut.

    PrivateKey: Kunci peribadi anda
  • Remoteip alamat IP pengguna yang menyelesaikan Captcha.
  • mencabar nilai
  • recaptcha_challenge_field dihantar melalui borang.
  • Respons Nilai
  • recaptcha_response_field dihantar melalui borang.
Cabaran dan respon data pos yang dihantar oleh borang ditangkap dan disimpan kepada $ cabaran dan respons $ masing -masing. $ _Server ["remote_addr"] Tangkap alamat IP pengguna dan ia ke $ remote_ip.

wordpress http api parameter pos untuk berada dalam bentuk array maka kod di bawah.

<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>
recaptcha_post_request () adalah fungsi pembalut untuk API HTTP yang akan menerima parameter/badan pos, membuat permintaan kepada API Recaptcha dan kembali benar jika ujian CAPTCHA diluluskan dan sebaliknya.

Mana -mana komen yang dibuat oleh pengguna yang gagal cabaran captcha atau meninggalkan medan kosong Dapatkan dipadam oleh delete_failed_captcha_comment ()
<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>

Akhirnya, kami menutup kelas plugin.
<span>/**
</span><span>	 * Get the reCAPTCHA API response.
</span><span>	 *
</span><span>	 * <span>@return <span>string</span>
</span></span><span>	 */
</span>	<span>public function recaptcha_response() {
</span>
		<span>// reCAPTCHA challenge post data
</span>		<span>$challenge = isset( $_POST['recaptcha_challenge_field'] ) ? esc_attr( $_POST['recaptcha_challenge_field'] ) : '';
</span>
		<span>// reCAPTCHA response post data
</span>		<span>$response = isset( $_POST['recaptcha_response_field'] ) ? esc_attr( $_POST['recaptcha_response_field'] ) : '';
</span>
		<span>$remote_ip = $_SERVER["REMOTE_ADDR"];
</span>
		<span>$post_body = array(
</span>			<span>'privatekey' => $this->private_key,
</span>			<span>'remoteip'   => $remote_ip,
</span>			<span>'challenge'  => $challenge,
</span>			<span>'response'   => $response
</span>		<span>);
</span>
		<span>return $this->recaptcha_post_request( $post_body );
</span>
	<span>}</span>

Kami selesai mengodkan kelas plugin. Untuk meletakkan kelas berfungsi, kita perlu memberi instantiasi seperti itu:
<span>$post_body = array(
</span>			<span>'privatekey' => $this->private_key,
</span>			<span>'remoteip'   => $remote_ip,
</span>			<span>'challenge'  => $challenge,
</span>			<span>'response'   => $response
</span>		<span>);
</span>
		<span>return $this->recaptcha_post_request( $post_body );</span>

Pada pengaktifan plugin, captcha akan ditambah ke borang komen WordPress seperti yang ditunjukkan di bawah.
<span>/**
</span><span>	 * Send HTTP POST request and return the response.
</span><span>	 *
</span><span>	 * <span>@param $post_body array HTTP POST body
</span></span><span>	 *
</span><span>	 * <span>@return <span>bool</span>
</span></span><span>	 */
</span>	<span>public function recaptcha_post_request( $post_body ) {
</span>
		<span>$args = array( 'body' => $post_body );
</span>
		<span>// make a POST request to the Google reCaptcha Server
</span>		<span>$request = wp_remote_post( 'https://www.google.com/recaptcha/api/verify', $args );
</span>
		<span>// get the request response body
</span>		<span>$response_body = wp_remote_retrieve_body( $request );
</span>
		<span>/**
</span><span>		 * explode the response body and use the request_status
</span><span>		 * <span>@see https://developers.google.com/recaptcha/docs/verify
</span></span><span>		 */
</span>		<span>$answers = explode( "\n", $response_body );
</span>
		<span>$request_status = trim( $answers[0] );
</span>
		<span>return $request_status;
</span>	<span>}</span>
Mengintegrasikan Captcha dengan Borang Komen WordPress

Bungkus

Pada akhir tutorial ini, anda harus dapat menambah bidang bentuk tambahan ke borang komen dan melaksanakan hampir apa -apa ciri yang anda ingin ada dalam sistem komen berkat penapis dan tindakan yang disebutkan.

Jika anda ingin menggunakan plugin di laman WordPress anda atau untuk mengkaji kod yang mendalam, muat turun plugin dari GitHub.

sehingga saya datang lagi, pengekodan gembira!

Soalan Lazim (Soalan Lazim) Mengenai Mengintegrasikan Captcha dengan Borang Komen WordPress

Apakah kepentingan mengintegrasikan CAPTCHA dengan borang komen WordPress? Pertama, ia membantu untuk mencegah komen spam, yang boleh merosakkan laman web anda dan menghalang pengguna yang tulen. Kedua, ia menambah lapisan keselamatan tambahan, melindungi tapak anda dari bot dan skrip automatik. Akhir sekali, ia menjimatkan masa dan sumber anda yang akan dibelanjakan untuk menyederhanakan dan memadam komen spam.

Bagaimana saya boleh menyesuaikan captcha pada borang komen WordPress saya? Borang boleh dilakukan melalui tetapan plugin Captcha yang anda gunakan. Kebanyakan plugin menawarkan pilihan untuk menukar kerumitan, reka bentuk, dan susun atur CAPTCHA. Ada juga yang membolehkan anda membuat captcha tersuai anda sendiri. Ini termasuk akismet, perkhidmatan penapisan spam, dan honeypot, kaedah yang menipu bot untuk mendedahkan diri mereka dengan berinteraksi dengan medan bentuk tersembunyi. 🎜> benar -benar. CAPTCHA boleh diintegrasikan dengan apa -apa bentuk di laman WordPress anda, termasuk borang hubungan, borang pendaftaran, dan borang log masuk. Ini memberikan keselamatan tambahan dan pencegahan spam di seluruh laman web anda. Periksa pertama untuk memastikan plugin dipasang dan diaktifkan dengan betul. Sekiranya masalah berterusan, cuba membersihkan cache penyemak imbas anda atau melumpuhkan plugin lain untuk melihat apakah terdapat konflik. Boleh diakses, pertimbangkan untuk menggunakan audio captcha atau captcha berasaskan logik, yang meminta pengguna menjawab soalan mudah. Juga, pastikan plugin CAPTCHA anda mematuhi Garis Panduan Kebolehcapaian Kandungan Web (WCAG).

adalah CAPTCHA berkesan terhadap semua jenis spam? Untuk ini, pertimbangkan untuk menggunakan langkah -langkah tambahan seperti kesederhanaan komen atau menyenaraikan kata -kata tertentu atau alamat IP. tidak boleh menjejaskan prestasi tapak. Walau bagaimanapun, seperti mana -mana plugin, ia menggunakan beberapa sumber. Sekiranya anda melihat kelembapan, pertimbangkan untuk menggunakan plugin Captcha yang ringan atau mengoptimumkan prestasi laman web anda dengan cara lain. Mungkin untuk mengintegrasikan Captcha dengan borang komen WordPress tanpa plugin, ia memerlukan pengetahuan pengekodan lanjutan dan tidak disyorkan untuk kebanyakan pengguna. Menggunakan plugin memudahkan proses dan memastikan bahawa CAPTCHA dilaksanakan dengan betul. Ini memastikan bahawa anda mempunyai ciri keselamatan terkini dan plugin tetap bersesuaian dengan versi terkini WordPress.

Atas ialah kandungan terperinci Mengintegrasikan Captcha dengan Borang Komen WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:XML-RPC untuk Pemaju WordPressArtikel seterusnya:XML-RPC untuk Pemaju WordPress