2013-10-01 7 views
4

내가 원시 필드를 확인하는 경우에는부울 및 정수 직렬화

$obj = array(
    'array' => array(1, 'zwei', !!3), 
    'string' => 'abc', 
    'bool' => true, 
    'bool2' => false, 
    'integer' => 1, 
    'integer2' => 17 
); 

update_post_meta($post_ID, 'my-key', $obj); 

같은 배열을 저장하는 워드 프레스 update_post_meta을 사용하고 이후에 문자열이 있어야한다 동안 나는

a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;s:1:"1";}s:6:"string";s:3:"abc";s:4:"bool";s:1:"1";s:5:"bool2";s:1:"0";s:7:"integer";i:1;s:8:"integer2";i:17;} 

얻을

a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;b:1;}s:6:"string";s:3:"abc";s:4:"bool";b:1;s:5:"bool2";b:0;s:7:"integer";i:1;s:8:"integer2";i:17;} 

모든 부울은 문자열 (b:1 = s:1:"1")

이 문제는 특정 WordPress 설치에서만 발생하며 모든 문제가 아닙니다. 나는 또한 또한 get_post_meta

get_post_meta($post_ID, 'my-key', true); 

을 사용하고 거짓 (명백하게) is_bool 반환

편집과 값 체크인 올바른 (반환 b:1)

를 작동하고 serialize 기능 확인했습니다를 단지 또한 정수가 문자열로 저장됩니다.

+0

특정 플러그인의 'sanitize_meta'필터가 설치에 적용되고 있습니까? 'add_filter ('sanitize_')에 대한 코드베이스 검색 – Tom

+0

어떤 WordPress 버전을 사용하고 있습니까? wp를 업데이트 한 다음 다시 확인할 수 있습니까? 3.5.2를 설치했고 3.6으로 업데이트 한 후 문제가있었습니다. .1 문제가 해결되었습니다 –

+1

WordPress> = 3.6은 [wp_unslash] (http://core.trac.wordpress.org/browser/tags/3.6.1/wp-includes/meta.php#L119)를 사용하는 반면 3.5.2 여전히 [stripslashes_deep] (http://core.trac.wordpress.org/browser/tags/3.5.2/wp-includes/meta.php#L119) – Xaver

답변

6

update_post_meta는 update_metadata를 사용하여 코드를 찾을 수 있습니다. 값이 문자열이 전에 값을 serialize 수있는 해결 방법으로

(데이터 형식이 stripslashes_deep입니다 변경하는 기능)입니다 반환하는 당신이 meta_value이 wp_unslash에 전달되는 것을 볼 수 at line 119 당신이보고있는 경우 그 기능에 here 에 전달 update_post_meta()

편집 :
문제 발견 :

$meta_key = stripslashes($meta_key) 

: 3.6.0 update_metadata 라인 (117)에이 코드를 가지고 전에은 문자열을 반환하는 PHP 함수입니다. 단지 문자열 형식의 meta_keys을 위해서 stripslashes

$meta_key = wp_unslash($meta_key); 

: 3.6.0 그 라인의 같은
는 것 같습니다.

wordpress 3.6.0 이상으로 업데이트하면 문제가 해결됩니다.

+0

을 사용하고 있습니다. 그러나 wp_unslash는 [stripslashes_deep] (http : //core.trac.wordpress.org/browser/tags/3.6.1/wp-includes/formatting.php#L1429) 문자열 만 변환합니다. – Xaver

+0

그래,이게 답이라면 현상금을받습니다. :) 제게 알려주세요. 그것을 확인하십시오 ... – Xaver

+0

좋아, 내가 소스를 확인했습니다 그리고 이것이 문제인 것 같습니다! 당신은 두통의 톤을 저장! – Xaver

관련 문제