추가 입력필드가 웹 주소일 시 하이퍼링크 자동 생성 방법

안녕하세요.

K보드의 추가 텍스트 입력필드 (id : related_board_link) 를 생성하였습니다.

입력필드에 입력된 값이 URL일 경우 게시판 본문이나 댓글처럼 하이퍼링크를 자동 생성하는 방법이 있을까요?

https://imgur.com/a/xtNOd8A

** 본문과는 다른 질문이지만, 댓글의 경우 최초 작성할 시에는 하이퍼링크가 잘 적용됩니다.

하지만 댓글을 수정하게되면, 하이퍼링크로 적용된 URL에 <a href="xx...">xx...</a> 가 붙으면서, 수정 시 a 태그를 지워주지 않으면 html 태그가 꼬이는 현상이 발생하는데요.

이것도 해결방안이 있는지 궁금합니다.

항상 정확하고 빠른 답변 감사드립니다.

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    KBoard 플러그인 입력 필드 설정으로 추가한 필드에

    주소가 있을 경우 링크를 추가하시려면

    아래의 코드를 활용해보시겠어요?

    add_filter('kboard_document_add_option_value_field_html', 'kboard_document_add_option_value_field_html_20200721', 10, 4);
    function kboard_document_add_option_value_field_html_20200721($html, $field, $content, $board){
    	$meta_key = isset($field['meta_key']) ? $field['meta_key'] : '';
    	$field_name = isset($field['field_name']) ? $field['field_name'] : $field['field_label'];
    	
    	if($meta_key == '메타키' && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$html = '<div class="kboard-document-add-option-value meta-key-'.$meta_key.'"><span class="option-name">'.$field_name.'</span> : '.$content->autolink($content->option->{$meta_key}).'</div><hr>';
    	}
    	
    	return $html;
    }

    위의 코드에서 메타키 부분은 실제 필드의 메타키로 적용해보세요.

    $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.

    테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.

     

    글 작성 에디터를 textarea로 사용하고 게시글 본문 자동링크 사용 활성화 시에도

    댓글 쪽에 자동링크를 추가하고 있습니다.

    저희 테스트 서버에서는 댓글 편집 시 <a> 태그가 표시되지 않는 것을 확인했습니다.

    만약, 별도로 코드를 수정하셨다면

    어떤 코드를 추가하셨는지 알려주시겠어요?

    프로그램 코드를 올려야 할 경우 에디터의 코드 스니펫 삽입 기능을 사용해주세요.

    고맙습니다.

  • 안녕하세요?

    메타키 링크 연결은 올려주신 코드로 잘 해결하였습니다. 감사합니다.

    글작성에디터로 TextArea를 사용 할 경우, 사진 삽입이 안되는 관계로 워드프레스 내장에디터를 사용중입니다.

    댓글에 하이퍼링크를 연결하기 위해, 아래 코드를 추가해서 사용중입니다.

    감사합니다.

    <?php
    /******************************************
     * K 보드 댓글 하이퍼링크 자동 href 연결
     ******************************************/
    add_filter('kboard_comments_content', 'my_kboard_comments_content', 10, 3);
    function my_kboard_comments_content($comment, $comment_uid, $content_uid){
    	return preg_replace_callback('#(?i)(http|https)?(://)?(([-\w^@]+\.)+(kr|co.kr|go.kr|net|org|edu|gov|me|com|co+)(?:/[^,\s]*|))#', 'kboard_comment_autolink_prependHTTP', $comment);
    }
    
    function kboard_comment_autolink_prependHTTP($m){
    	$mStr = $m[1].$m[2].$m[3];
    	if(preg_match('#([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#', $mStr)){
    		return "<a href=\"mailto:".$m[2].$m[3]."\" target=\"_blank\">".$m[1].$m[2].$m[3]."</a>";
    	}
    	else{
    		$http = (!preg_match("#(https://)#", $mStr)) ? 'http://' : 'https://';
    		return "<a href=\"".$http.$m[3]."\" target=\"_blank\">".$m[1].$m[2].$m[3]."</a>";
    	}
    } 

     

  • kboard_comments_content 필터를 사용해서 게시글 댓글을 편집 중이시라면

    댓글 수정 시에는 댓글 내용 그대로 표시하면 될 듯합니다.

    기존 코드 대신 아래의 코드로 교체해서 확인해보시겠어요?

    add_filter('kboard_comments_content', 'my_kboard_comments_content', 10, 3);
    function my_kboard_comments_content($comment, $comment_uid, $content_uid){
    	$action = isset($_GET['action']) ? sanitize_text_field($_GET['action']) : '';
    	if($action == 'kboard_comment_edit'){
    		return $comment;
    	}
    	return preg_replace_callback('#(?i)(http|https)?(://)?(([-\w^@]+\.)+(kr|co.kr|go.kr|net|org|edu|gov|me|com|co+)(?:/[^,\s]*|))#', 'kboard_comment_autolink_prependHTTP', $comment);
    }

    고맙습니다.

  • 안녕하세요?^^

    작성해주신 함수로 교체하니 잘 해결되었습니다.

    감사합니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기