다차원 배열에 저장된 업데이트 옵션


15

wp_options현재 테이블에 데이터가 다차원 배열 ( profile_element_order) 로 저장되어 있습니다 .

a:12:{s:17:"img_base64_enable";s:1:"1";s:25:"moulding_combination_page";s:0:"";s:24:"moulding_collection_page";s:0:"";s:25:"idea_gallery_thumb_height";s:3:"200";s:24:"idea_gallery_thumb_width";s:3:"200";s:23:"collection_thumb_height";s:3:"200";s:22:"collection_thumb_width";s:3:"200";s:20:"profile_item_columns";s:1:"4";s:17:"idea_item_columns";s:1:"2";s:24:"collections_item_columns";s:1:"2";s:25:"combinations_item_columns";s:1:"4";s:21:"profile_element_order";a:5:{i:0;s:8:"Option 1";i:1;s:8:"Option 2";i:2;s:8:"Option 3";i:3;s:8:"Option 4";i:4;s:8:"Option 5";}}

내가 달성하려고하는 것은 profile_element_order옵션을 업데이트하는 것입니다 (해당 옵션 내). 다음은 모든 것이 지금까지 보이는 모습입니다.

function psort_save_order() {

    global $mouldings_options;

    $list = $mouldings_options['profile_element_order'];
    $new_order = $_POST['list_items'];
    $new_list = array();

    // update order
    foreach($new_order as $v) {
        if(isset($list[$v])) {
            $new_list[$v] = $list[$v];
        }
    }

    // save the new order
    update_option('profile_element_order', $new_list);

    die();
}
add_action('wp_ajax_psort_update_order', 'psort_save_order');

데이터가 DB 테이블에 올바르게 게시되고 있습니다 (실패한 시도 중 일부를 새로운 옵션 항목으로 볼 수 있음 mouldings_settings->profile_element_order)- update_option()특정 옵션에 대한 구문을 파악하는 데 어려움을 겪고 있습니다. 나는 다음과 같은 것을 시도했다 (`mouldings_settings는 실제 옵션 이름이다) :

mouldings_settings['profile_element_order']
$mouldings_options['profile_element_order']
profile_element_order

하지만 지금은 주사위가 없습니다. 어떤 포인터라도 대단히 감사하겠습니다! 감사!

업데이트 이것이 내가 가진 것입니다-아약스 작업은 잘 저장되지만 플러그인 옵션을 저장하면 데이터베이스의 옵션이 복제되고 이전과 동일한 오류가 발생합니다.

a:17:{s:17:"img_base64_enable";s:1:"1";s:25:"moulding_combination_page";s:0:"";s:24:"moulding_collection_page";s:0:"";s:25:"idea_gallery_thumb_height";s:3:"200";s:24:"idea_gallery_thumb_width";s:3:"200";s:23:"collection_thumb_height";s:3:"200";s:22:"collection_thumb_width";s:3:"200";s:20:"profile_item_columns";s:1:"4";s:17:"idea_item_columns";s:1:"2";s:24:"collections_item_columns";s:1:"2";s:25:"combinations_item_columns";s:1:"4";s:21:"profile_element_order";a:5:{i:4;s:8:"Option 5";i:0;s:8:"Option 1";i:1;s:8:"Option 2";i:3;s:8:"Option 4";i:2;s:8:"Option 3";}i:0;s:8:"Option 5";i:1;s:8:"Option 1";i:2;s:8:"Option 2";i:3;s:8:"Option 4";i:4;s:8:"Option 3";}

함수:

function psort_save_order() {

    global $mouldings_options;

    $list = $mouldings_options['profile_element_order'];
    $new_order = $_POST['list_items'];
    $new_list = array();

    // update order
    foreach($new_order as $v) {
        if(isset($list[$v])) {
            $new_list[$v] = $list[$v];
        }
    }

    $mouldings_options['profile_element_order'] = $new_list;
    $mouldings_options = array_merge($mouldings_options,$mouldings_options['profile_element_order']);

    // save the new order
    update_option('mouldings_settings', $mouldings_options);

    die();
}
add_action('wp_ajax_psort_update_order', 'psort_save_order');

답변:


36

워드 프레스에 관한 한, 다차원 배열은 하나의 옵션입니다.

다차원 배열의 일부만 전체 배열을 검색하는 데 필요한 업데이트하려면 적절하게 변경 한 다음 전체 배열을 업데이트하십시오.

다차원 배열이 다음과 같다고 가정하십시오.

my_options = array(
  'option_a'=>'value_a',
  'option_b'=>'value_b',
  'inner_array'=>array(
       'foo' => 'bar',
       'hello' => 'world',
   ),
  'option_c'=>'value_c'
)

그리고 'hello'옵션의 값을 'world'에서 'moon'로 업데이트한다고 가정하십시오.

//Get entire array
$my_options = get_option('my_options');

//Alter the options array appropriately
$my_options['inner_array']['hello'] = 'moon';

//Update entire array
update_option('my_options', $my_options);

1
Hi Steven-플러그인 설정을 저장하고 새로 고치면 Ajax와 함께 작동하지만 (새로 고침 할 때 위치를 저장합니다) DB 테이블의 옵션이 약간 지저분합니다 중복 된 것처럼 보입니다) 오류가 발생합니다. 그래도 계속 잘못 접근하고 있습니까? 감사.
Zach

행 자체가 복제된다고 말하고 있습니까? 아니면 행 안에 옵션이 중복되어 나타 납니까? 옵션을 삭제하고 다시 시도하십시오. 이전 시도에서 복제본을 유지 한 것일 수 있습니다.
Stephen Harris

안녕 스티븐-문제를 재현하기 위해 내 단계의 pastebin을 만들었습니다 : pastebin.com/YHg1i7HR 감사합니다!
Zach

를 제거해보십시오 array_merge. 중복이 발생했습니다. 하위 배열이있는 배열을 병합하고 있습니다 (하위 배열이 복제 됨).
Stephen Harris

안녕 스티븐-나는 그것을 쓰는 방법을 확신 할 수 없다고 생각합니다 .- $mouldings_options['profile_element_order'] = $new_list;update_option('mouldings_settings', mouldings_options);이제 중복이없는 (그리고 DB에 올바르게 쓰는 것이 좋습니다)-페이지 저장 (플러그인 설정 저장) 플러그인 설정은 데이터베이스에서 여전히 제거됩니다 (그 페이스트 빈의 마지막 부분처럼).
Zach
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.