2016-08-09 1 views
1

wp_postmeta 테이블에 저장하기 전에 연관 배열의 각 구성원에 대해 암호화 함수를 실행해야합니다. 내 양식 동적 추가/행을 삭제할 수 있습니다. 나는 이것을 array_walk()을 사용하여 작동 시키려고 노력했다.add_post_meta() 함수를 사용하여 연관 배열을 저장할 수 없습니다.

이 양식을 구성하는 방법입니다 :

<input type="text" id="z_my_data[][username]" name="z_my_data[0][username]"> 
<input type="text" id="z_my_data[][password]" name="z_my_data[0][password]"> 

이는 'save_post` 액션을 실행한다 :

// Save encrypted data to post meta 
if (isset($_POST['z_my_data'])) { 

    // Get posted form variables 
    $my_data = $_POST['z_my_data']; 

    // Encrypt each member of each row 
    for ($i = 0; $i < count($my_data); $i++) { 
     $cryptKey = $this->cryptKey; 
     array_walk($my_data[strval($i)], create_function('&$val', 'global $cryptKey; $val = Crypto::encrypt($val, $cryptKey);')); 
    } 

    if (! add_post_meta($post_id, '_my_data', $my_data, true)) { 
     update_post_meta($post_id, '_my_data', $my_data); 
    } 

} else { 
    delete_post_meta($post_id, '_my_data'); 
} 

나는 데이터가 암호화되고 있음을 볼 수 있습니다.

Array 
(
    [0] => Array 
     (
      [username] => ®ØåÛâÏ0…"ë°?mˤ٠
      [password] => xSFç„L¶·3z˜'J0ÖRÅÎj 
     ) 

) 

그러나 포스트 메타 키가 생성되지 않고 오류가 생성됩니다 다음은 for 루프 후 print_r($my_data)입니다. 메타 키가 포스트 메타 테이블에 존재하지 않지만 add_post_meta()이 false를 반환하고 키/값이 절대로 추가되지 않습니다.

내가 뭘 잘못하고 있는지 누가 알 수 있습니까?

어떻게 말할지는 모르겠지만 [0]은 인덱스 키가 아닌 명명 된 키라고 생각합니다. 나는 하나 이상의 요소를 생성하고 [0] 요소를 삭제할 수 있고 나머지 하나의 요소는 여전히 print_r을 사용하여 [1]을 보여줄 수 있기 때문에 그렇게 말합니다. 당신의 if (! add_post_meta($post_id, '_my_data', $my_data, true)) { 당신이 add_post_meta() 기능을 사용하고 마지막 인수가 true로 설정에서

+0

'(만약! add_post_meta ....','else' 조건을 넣고 뭔가 처리합니다. –

+0

@JeremyHarris'add_post_meta'는 이미 존재하면 false를 반환합니다. 추가가 성공하면 true를 반환합니다. 당신의 요점을 놓치고 있습니까? – rwkiii

+0

'게시물 메타 키가 생성되지 않고 오류가 생성되지 않습니다. '.... 그래서'if' 문은 false를 반환합니다. 'unique' 인자가 true (마지막 인자)로 설정되어 있으므로, 아마도 중복 값을 가지고있을 것입니다. 어떻게 처리할까요? 'else' 조건을 추가하고 처리하십시오 :-) –

답변

1

. 당신이 stringarray을하지 삽입되기 때문에
이 대신false해야한다.
if 성명 이 제대로 작동하지 않습니다..

대신, 코드 (add_post_meta 마지막 인수의 기본값은 같이 false)해야한다 : 또는

if (! add_post_meta($post_id, '_my_data', $my_data)) { 
    update_post_meta($post_id, '_my_data', $my_data); 
} 

, 당신은이를 사용할 수 있습니다

if ((!empty(get_post_meta($post_id, '_my_data'))) { 
    update_post_meta($post_id, '_my_data', $my_data); 
} 

참고 : 조건부 블록에서

+0

두 질문이 같은 문제와 관련이 있다고 생각합니다. 고마워! – rwkiii