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

안녕하세요.

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);
    }

    고맙습니다.

  • 안녕하세요?^^

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

    감사합니다.

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