AJAX 기술을 사용하여 WordPress_javascript 기술로 의견을 제출하는 구현 예
저는 예전부터 WordPress의 Ajax 상호작용에 대한 연구에 관심이 있었고, WordPress Ajax에 대해 이야기할 때 블로그나 포럼 댓글로 Ajax를 언급하는 경우가 늘 있었습니다. 제출은 사용자 경험을 향상시킬 뿐만 아니라 서버 비용도 크게 줄일 수 있습니다. 결국 페이지를 재구성하여 출력하는 것보다 단일 댓글을 출력하는 것이 훨씬 간단합니다. 지금은 방문 횟수가 상대적으로 적고 서버 압박 문제도 없지만, 항상 사용자 경험에 관심을 기울여온 나로서는 사용자 경험을 향상시킬 수 있는 기회를 결코 포기할 수 없다. 나는 오늘 오후 시간을 보내며 이 주제에 대한 Ajax 코멘트의 예비 제출을 완료했습니다.
본론으로 바로 가서 코드에 도달하세요: (원칙과 아이디어는 마지막에 있습니다)
자신의 테마의 다양한 구조에 따라 다음 코드를 조정하세요.
WordPress Ajax 댓글 제출 PHP 코드
테마 function.php 파일에 다음 섹션을 추가합니다.
//以下大部分代码出自 yinheli 经由该部分代码,排除部分错误、优化精简得出以下代码。 //yinheli博客不做了,所以这里就不给链接了。 //Edited by XiangZi DEC.17TH 2011 function fail($s) {//虚拟错误头部分 header('HTTP/1.0 500 Internal Server Error'); echo $s; exit; } function ajax_post_comment_slow (){ fail('用不用说这么快?想好了再说!'); } //评论太快输出代码。 add_filter('comment_flood_trigger','ajax_post_comment_slow', 0); //挂一个评论太快,返回内容的钩子 function ajax_comment(){ // Ajax php 响应部分代码 if($_POST['action'] == 'ajax_comment') { global $wpdb, $db_check; // Check DB if(!$wpdb->dbh) { echo('Our database has issues. Try again later.'); die(); } nocache_headers(); $comment_post_ID = (int) $_POST['comment_post_ID']; $status = $wpdb->get_row("SELECT post_status, comment_status FROM $wpdb->posts WHERE ID = '$comment_post_ID'"); if ( empty($status->comment_status) ) { //这一套判断貌似抄的 wp 源代码 。详见:include/comment.php do_action('comment_id_not_found', $comment_post_ID); fail('The post you are trying to comment on does not currently exist in the database.'); } elseif ( 'closed' == $status->comment_status ) { do_action('comment_closed', $comment_post_ID);; fail('Sorry, comments are closed for this item.'); } elseif ( in_array($status->post_status, array('draft', 'pending') ) ) { do_action('comment_on_draft', $comment_post_ID); fail('The post you are trying to comment on has not been published.'); } $comment_author = trim(strip_tags($_POST['author'])); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']); // If the user is logged in $user = wp_get_current_user(); if ( $user->ID ) { $comment_author = $wpdb->escape($user->display_name); $comment_author_email = $wpdb->escape($user->user_email); $comment_author_url = $wpdb->escape($user->user_url); if ( current_user_can('unfiltered_html') ) { if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) { kses_remove_filters(); // start with a clean slate kses_init_filters(); // set up the filters } } } else { if ( get_option('comment_registration') ) fail('火星人?注册个?'); } $comment_type = ''; if ( get_option('require_name_email') && !$user->ID ) { if ( 6> strlen($comment_author_email) || '' == $comment_author ) fail('Oopps,名字[Name]或邮箱[email]不对。'); elseif ( !is_email($comment_author_email)) fail('Oopps,邮箱地址[Email]不对。'); } if ( '' == $comment_content ) fail('是不是应该写点什么再提交?'); // Simple duplicate check $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND ( comment_author = '$comment_author' "; if ( $comment_author_email ) $dupe .= "OR comment_author_email = '$comment_author_email' "; $dupe .= ") AND comment_content = '$comment_content' LIMIT 1"; if ( $wpdb->get_var($dupe) ) { fail('评论重复了!有木有!'); } $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID'); if( !$user->ID ){ $result_set = $wpdb->get_results("SELECT display_name, user_email FROM $wpdb->users WHERE display_name = '" . $comment_author . "' OR user_email = '" . $comment_author_email . "'"); if ($result_set) { if ($result_set[0]->display_name == $comment_author){ fail('博主你也敢冒充?'); } else { fail('博主你也敢冒充?'); } } } $comment_id = wp_new_comment( $commentdata ); $comment = get_comment($comment_id); if( !$user->ID ){ setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_url_' . COOKIEHASH, clean_url($comment->comment_author_url), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); } @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); xz_comment($comment, null);//这是我的调用评论函数,换成你的函数名。 die(); } } add_action('init', 'ajax_comment');
자바스크립트 코드
참고: 다음 코드에는 Jquery 프레임워크 지원이 필요합니다.
javascript onload 코드에 다음 부분을 추가합니다.
if (jQuery('#commentform').length) { jQuery('#commentform').submit(function(){ // 截获提交动作 //ID为 commentform 的表单提交时发生的函数,也就是整个留言输入框 form 的ID。 var ajaxCommentsURL = window.location.href; jQuery.ajax({ url: ajaxCommentsURL, data: jQuery('#commentform').serialize()+'&action=ajax_comment', type: 'POST', beforeSend: function() { jQuery('#commenterror').hide(); jQuery('#commentload').fadeIn(); }, error: function(request) { //发生错误时 jQuery('#commenterror').html(request.responseText); jQuery('#commentload').hide(); //隐藏 submit jQuery('#commenterror').fadeIn(); //显示 error }, success: function(data) { jQuery('textarea').each(function(){ this.value=''; }); jQuery('#commenterror').fadeOut(); if(jQuery(".commentlist li.comment").first().length != 0){jQuery(".commentlist li.comment").first().before(data)} else {jQuery("ol.commentlist").append(data)} jQuery(".commentlist li.comment").first().hide(0,function(){$(this).slideDown(1000)}); jQuery('#cmt-submit').attr('disabled', true).css({"background-color":"#6C6C6C","color":"#E0E0E0"}); jQuery('#commentload').fadeOut(1600); setTimeout(function() { jQuery('#cmt-submit').removeAttr('disabled').css({"background-color":"#0086C5","color":"#FFFFFF"}); },3000); } }); return false; } ); }
참고: 코드는 아직 개선이 필요합니다. 시간이 없기 때문에 더 이상 발전하지 않았습니다.
CSS 코드
선택적으로 CSS를 추가하세요.
#commentload,#commenterror{ display: none; margin: 5px 0 0 0; color:#D29A04; float: left; font-size:16px; padding:0 0 0 20px; } #commentload{ background: url("img/loading.gif") no-repeat bottom left ; } #commenterror{ background: url("img/error.png") no-repeat bottom left ; }
원칙과 아이디어
원칙:
자바스크립트 제출 데이터
PHP가 응답하고 결과를 출력합니다
Javascript가 결과를 받아 표시합니다
아이디어:
제출 버튼을 클릭하면 Javascript가 제출 작업을 가로챕니다
제출된 데이터(이름, 이메일, 웹, 댓글 텍스트) 차단
Javascript Jquery를 사용하여 WordPress에 POST(이름, 이메일, 웹, 댓글 텍스트) 요청을 제출하는 브라우저를 시뮬레이션합니다
Function.php 파일에서 요청을 수락하는 함수, 즉 이 열의 ajax_comment 함수를 구성하세요.
요청에 오류가 없으면 올바른 결과가 출력됩니다
요청에 오류가 있는 경우 오류 결과를 출력합니다
올바른 결과를 얻기 위한 자바스크립트, 댓글 목록에 동적으로 추가됨
Javascript는 오류 결과를 얻고 이를 제출 프롬프트 표시줄에 동적으로 추가합니다
개선 사항
스타일에 관해서는 정말 미의식이 전혀 없어서 아직 배우는 중이에요.
제출 버튼은 반환 결과를 얻을 때까지 클릭한 후 3초 동안 회색으로 표시되고 유효하지 않습니다. 이 컴퓨터에서 테스트 중이었고 원격 테스트 중에 제출이 즉시 완료되었기 때문에 이전에는 이 사실을 알 수 없었습니다. 하지만 바꾸고 싶다면 바꿔야 해요. 시간이 너무 촉박하면 바꾸지 않을 거예요.
요약
WordPress 테마의 댓글 스타일이 자유롭고 다양하기 때문에 보편적인 AJAX 댓글 플러그인은 없었던 것 같습니다.
일부 전문가는 블로그를 최적화하는 동안 자신의 아이디어와 일부 공통 핵심 코드만 게시할 수 있습니다.
따라서 멋진 기능을 구현하려면 전문가의 도움이 필요합니다.
그렇지 않으면 코드만 열심히 공부해서 언젠가 많은 지식을 쌓을 수 있기를 바라겠습니다.
효과를 확인하려면 의견을 제출해 주세요.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

WordPress 기사 목록을 조정하는 4 가지 방법이 있습니다. 테마 옵션 사용, 플러그인 사용 (예 : Post Type Order, WP Post List, Boxy Sitture), 코드 사용 (Functions.php 파일의 설정 추가) 또는 WordPress 데이터베이스를 직접 수정하십시오.

WordPress 호스트를 사용하여 웹 사이트를 구축하려면 다음과 같이 필요합니다. 신뢰할 수있는 호스팅 제공 업체를 선택하십시오. 도메인 이름을 구입하십시오. WordPress 호스팅 계정을 설정하십시오. 주제를 선택하십시오. 페이지와 기사를 추가하십시오. 플러그인을 설치하십시오. 웹 사이트를 사용자 정의하십시오. 귀하의 웹 사이트를 게시하십시오.

WordPress 소스 코드 가져 오기에는 다음 단계가 필요합니다. 테마 수정을위한 하위 주제를 만듭니다. 소스 코드를 가져 와서 하위 주제에서 파일을 덮어 씁니다. 하위 주제를 활성화하여 효과적입니다. 모든 것이 작동하는지 확인하기 위해 변경 사항을 테스트하십시오.

WordPress의 헤더 이미지를 교체하기위한 단계별 안내서 : WordPress 대시 보드에 로그인하고 모양 & gt; 테마로 이동하십시오. 편집 할 주제를 선택하고 사용자 정의를 클릭하십시오. 테마 옵션 패널을 열고 사이트 헤더 또는 헤더 이미지 옵션을 찾으십시오. 이미지 선택 버튼을 클릭하고 새 헤드 이미지를 업로드하십시오. 이미지를 자르고 저장 및 자르기를 클릭하십시오. 저장 및 게시 버튼을 클릭하여 변경 사항을 업데이트하십시오.

대시 보드에 로그인하고보기 사이트 탭으로 전환하여 WordPress 프론트 엔드를 볼 수 있습니다. 헤드리스 브라우저로 시청 프로세스를 자동화하십시오. 대시 보드 내에서 프론트 엔드를 미리 볼 수 있도록 WordPress 플러그인 설치; 로컬 URL을 통해 프론트 엔드를보십시오 (WordPress가 로컬로 설정된 경우).

WordPress IP 차단 플러그인 선택이 중요합니다. 다음 유형을 고려할 수 있습니다. .htaccess : 효율적이지만 복잡한 작동; 데이터베이스 작동 : 유연하지만 효율성이 낮습니다. 방화벽 : 높은 보안 성능이지만 복잡한 구성; 자체 작성 : 가장 높은 제어력이 있지만 더 많은 기술적 수준이 필요합니다.

WordPress에서 계정을 만들려면 웹 사이트를 방문하고 등록 옵션을 선택하고 등록 양식을 작성한 다음 이메일 주소를 확인하십시오. 등록하는 다른 방법으로는 Google 계정 또는 Apple ID 사용이 포함됩니다. 가입의 이점에는 웹 사이트 만들기, 기능 입력, 커뮤니티 가입 및 지원 받기가 포함됩니다.

WordPress 템플릿은 전문 웹 사이트를 신속하게 만듭니다. 템플릿을 가져 오는 단계에는 다음이 포함됩니다. 템플릿을 선택하고 다운로드합니다. WordPress 대시 보드에 로그인하십시오. 모양 메뉴에서 테마를 선택하십시오. "새 테마 추가"를 클릭하십시오. "주제 업로드"를 클릭하고 다운로드 된 템플릿 .zip 파일을 선택하십시오. "지금 설치"를 클릭하십시오. "활성화"버튼을 클릭하십시오. 사용자 정의 메뉴를 통해 템플릿을 사용자 정의하십시오.
