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


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.