크로스 캘린더 스킨 어드민 입력필드 설정 화면에서 .nestedSortable 자바스크립트 에러가 납니다.

안녕하세요.
php 8.0 관련된 문제로
얼마전에 https://github.com/cosmosfarm/KBoard-wordpress-plugin 2021.11.11 패치본으로 업데이트를 하고, 
/wp-content/plugins/kboard/class/KBContentOption.class.php 파일 24번째 줄의 unserialize() 함수의 인자값의 타입을 정수로 바꿔주는 방식으로 코드를 변경해서 문제없이 쓰고 있었습니다.
(https://www.cosmosfarm.com/threads/document/56440 에서 제가 문의드렸던 내역을 확인하실 수 있습니다.)

그런데 크로스 캘린더 게시판을 설치해보니 어드민 화면에서 에러가 납니다.
크로스 캘린더 스킨은 전혀 커스텀 하지 않은 상태입니다.
"입력필드 설정" 페이지에서 자바스크립트 에러가 나고 있습니다.
"Uncaught TypeError: jQuery(...).nestedSortable is not a function"
다른 게시판 설정화면에는 kboard/asset/nested-sortable 라이브러리와 template/js 에 있는 타임피커등이 포함되어 있는데
크로스 캘린더 설정 화면에는 그게 포함이 안되어 있습니다.
https://imgur.com/a/jDwM3g0
스샷 보시고 혹시 뭐가 문제인지 확인해주실 수 있을까요?

감사합니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요.
    자바스크립트 라이브러리는 php 코드가 에러 이후로 써지지 않으면서 그냥 안 불러와진 거였네요.

    문제되는 부분을 찾았습니다.

    kboard_skin_fields 필터로 필드타입을 등록할 때 
    배열에 'permission' => '' 키값을 주면 php 에러가 납니다.

    다른 게시판에 필드 타입 만들 때도 permission 키값을 설정했다가 에러가 났던게 생각나서
    크로스 캘린더 functions.php 함수에서도 지워봤더니 어드민 에러가 사라졌네요.

    이것도 php 8.0 관련 문제일까요?

     

  • 안녕하세요~^^

    kboard_skin_fields 필터로 코드는 어떻게 추가하셨는지요?

    에디터의 코드 스니펫 삽입 기능을 사용해서 올려주시겠어요?

    그리고 표시되는 에러 메시지도 함께 알려주시겠어요?

    고맙습니다.

  • 제가 다른 게시판에서 쓴 필터는 아래와 같습니다.

    add_filter('kboard_skin_fields', 'testlib_kboard_skin_fields', 10, 2);
    function testlib_kboard_skin_fields($fields, $board){
    	
    	if(in_array($board->id, array('7'))){
    		
    	    if(!isset($fields['shipping_address'])){
    	        $fields['shipping_address'] = array(
    	            'field_type' => 'shipping_address',
    	            'field_label' => esc_html__('배송주소', 'testlib'),
    	            'class' => 'kboard-attr-text',
    	            'hidden' => '',
    	            'meta_key' => 'shipping_address',
    	            //'permission' => '',
    	            'field_name' => '',
    	            'roles' => '',
    	            'default_value' => '',
    	            'placeholder' => esc_html__('주소 *', 'testlib'),
    	            'required' => 1,
    	            'show_document' => 1,
    	            'description' => '',
    	            'close_button' => 'yes'
    	        );
    	    }
    	    
    	}
    }

    kboard-functions.php 에 넣어서 테마의 functions.php에 인클루드 시켰습니다.

    그때는 permission 키를 넣으면 "이 웹사이트에 치명적인 오류가 있습니다." 그런 메세지가 떴었습니다.
    따로 디버그를 하지는 않았는데 2021.11.11 패치를 한 이후라 그런지 지금은 permission을 주석 해제해도 에러가 나지 않네요.

    문제된 크로스 캘린더 스킨은 제가 코드를 손댄 부분이 전혀 없습니다.
    그리고 지금도 퍼미션을 주석 해제하면 아래 에러가 발생합니다.
    위에 첨부한 스샷 페이지 (어드민 세팅 페이지) 에서 색상 필드를 출력하는 도중에 아래처럼 에러가 납니다.

    <label><input type="checkbox" name="fields[color][roles][]" class="field_data" value="editor" <br="">
    <b>Warning</b>:  Undefined array key "roles" in <b>/home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php</b> on line <b>1165</b><br>
    <br>
    <b>Fatal error</b>:  Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, null given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:1165
    Stack trace:
    #0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(1165): in_array()
    #1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(386): include_once('...')
    #2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(333): kboard_setting()
    #3 /home/WWW/docroot/wp-includes/class-wp-hook.php(303): kboard_list()
    #4 /home/WWW/docroot/wp-includes/class-wp-hook.php(327): WP_Hook-&gt;apply_filters()
    #5 /home/WWW/docroot/wp-includes/plugin.php(470): WP_Hook-&gt;do_action()
    #6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()
    #7 {main}
      thrown in <b>/home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php</b> on line <b>1165</b><br>
    	<div class="wp-die-message"><p>이 웹사이트에 치명적인 오류가 있습니다.</p><p><a href="https://wordpress.org/support/article/faq-troubleshooting/">워드프레스 장애복구에 관해 더 알아보기.</a></p></div>
    </label>

     

    저는 permission 기능은 필요없기 때문에 그냥 주석처리하고 쓰면 될 것 같습니다.
    그럼 확인해주세요~
     

  • 올려주신 코드를 확인해보니

    testlib_kboard_skin_fields 함수에 리턴 값이 없어서 에러가 발생하는 듯합니다.

    아래 코드로 교체해서 확인해보세요.

    add_filter('kboard_skin_fields', 'testlib_kboard_skin_fields', 10, 2);
    function testlib_kboard_skin_fields($fields, $board){
    	if(in_array($board->id, array('7'))){
    		if(!isset($fields['shipping_address'])){
    			$fields['shipping_address'] = array(
    				'field_type' => 'shipping_address',
    				'field_label' => esc_html__('배송주소', 'testlib'),
    				'class' => 'kboard-attr-text',
    				'hidden' => '',
    				'meta_key' => 'shipping_address',
    				'permission' => '',
    				'field_name' => '',
    				'roles' => '',
    				'default_value' => '',
    				'placeholder' => esc_html__('주소 *', 'testlib'),
    				'required' => 1,
    				'show_document' => 1,
    				'description' => '',
    				'close_button' => 'yes'
    			);
    		}
    		
    	}
    	
    	return $fields;
    }

    permission 쪽을 주석 처리하지 않고도 에러 메시지가 별도로 표시되지 않는 걸

    저희 쪽 테스트 서버에서 확인했습니다.

    고맙습니다.

  • 다른 게시판은 퍼미션 풀어도 에러가 나지 않는 것을 확인했다고 썼습니다.
    return $fields; 는 당연히 첨부터 적용되어 있었습니다. 필드가 여러개인데 한개만 보여드리다가 코드에서 빠졌습니다.


    문제는 제가 전혀 손대지 않은 크로스 캘린더 스킨의 어드민 화면에서 발생했습니다.
    크로스 캘린더 스킨은 기본적으로 모든 필드를 따로 스킨 폴더 내의 functions.php에서 등록해서 사용하고 있는 것 같습니다.
    제가 쓴 코드가 아닙니다.
    저는 퍼미션 없이 써도 상관이 없기 떄문에 확인 안하셔도 상관없지만
    다음번 패치등에 도움이 될까해서 올린 글 입니다.

  • 안녕하세요. 방금 전화로 크로스캘린더 게시판 어드민 설정에서 카테고리가 설정이 안된다고 문의드렸었는데요, 제 실수였습니다.
    어드민 설정에서 카테고리 활성화를 안해놓고선 카테고리 등록이 안된다고 문의를 드렸네요.
    신경쓰지 않으셔도 될 것 같습니다. 죄송합니다 :grinning_face_with_sweat:

  • 입력필드 부분 nestedSortable 스크립트 오류는

    입력 필드 코드 중 역할 부분이 입력되어 있지 않아 발생했던 오류였습니다.

    크로스 캘린더 스킨은 2.3 버전으로 업데이트 되었습니다.

    스킨 업데이트 후 확인해보시겠어요?

     

    다만, 색상 입력 필드 쪽 오류는 저희측에서는 확인이 되지 않습니다.

    업데이트 후 필드 초기화를 한 후에도 색상 입력 필드 쪽에 오류가 발생된다면

    저희 고객지원 쪽 이메일로 워드프레스 관리자 계정과 FTP 접속 정보를 보내주시면 점검해드리겠습니다.

    메일 내용에는 커뮤니티의 링크도 포함해주세요.

    고맙습니다.

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기