프로그래밍 방식으로 직렬화 된 옵션을 업데이트하는 방법?


15

플러그인 옵션 업데이트를 자동화하고 싶습니다. 내가 많이 반복하는 것들이 있습니다.

wp-cli를 사용하면 다음과 같은 간단한 옵션을 업데이트 할 수 있습니다.

php wp-cli.phar option update blog_public 1

그러나 일부 플러그인 옵션은 옵션을 직렬화 된 문자열로 저장합니다.

wp_options에서 직렬화 된 option_value의 예 :

a:9:{s:4:"from";s:21:"xx@xxx.com";s:8:"fromname";s:51:"xxx";s:4:"host";s:13:"smtp.xx.com";s:10:"smtpsecure";s:3:"ssl";s:4:"port";s:3:"465";s:8:"smtpauth";s:3:"yes";s:8:"username";s:21:"xx@xxx.com";s:8:"password";s:13:"xxx";s:10:"deactivate";s:0:"";}

해당 옵션을 업데이트하는 방법은 무엇입니까?

답변:


14

직접 해결하면 다음과 같습니다.

직렬화 된 옵션을 프로그래밍 방식으로 업데이트하려는 경우 :

wp-cli.org에서 wp-cli 다운로드

사용중인 옵션의 "키"가 무엇인지 확인하십시오. 이 예에서 키는 "wp_smtp_options"입니다.

키를 모르면 wp_options 테이블에서 검색하여 알아보십시오.

예: select * from wp_options where option_name like '%smtp%'

키를 알고 있으므로이 명령을 사용하여 구성을 json 파일에 저장하십시오.

php wp-cli.phar option get wp_smtp_options --format=json > my_saved_config.txt

해당 구성을 복원 할 때마다이 명령을 사용하십시오.

php wp-cli.phar option update wp_smtp_options --format=json < my_saved_config.txt

노트:

  • WAMPSERVER64에서 작동
  • ñ á é와 같은 유니 코드 문자로 작동
  • 가독성을 위해 패딩과 공백이있는 json 파일을 가질 수 있습니다

이 목적으로 중간 파일을 사용할 필요가 없습니다. 아무도 그것을하는 방법을 알고 있습니까?


1
고마워-잘 했어. 누구나 외부 파일을 요구하지 않고 스크립트를 작성하려는 경우 option update작은 따옴표로 json을 줄에 넣을 수 있습니다 . 61 번 라인에서 구현 된 부분을보십시오 : gist.github.com/squarecandy/cfdead55ca1d84496044
squarecandy

"하나의 라이너"에 대한 내 답변을 참조하십시오
Laurent

13

WP-CLI는 WordPress에서 직렬화 된 데이터에 액세스하기위한 pluckpatch 명령을 도입 한 1.4.0으로 업데이트 한 후 이에 대한 해답 입니다.

pluck 명령은 직렬화 된 값을 가져 오기 위해이 형식을 사용합니다.

wp option pluck <key> <key-name>

예를 들어 active_plugins 옵션에서 첫 번째 항목을 가져올 수 있습니다

wp option pluck active_plugins 0

patch 명령은 직렬화 된 값을 삽입, 업데이트 또는 제거하기 위해이 형식을 사용합니다 (작업).

wp option patch <action> <key> <key-name> <value>

첫 번째 active_plugin을 삭제하면 다음과 같습니다

wp option patch delete active_plugins 0

postmeta와 같은 다른 명령에도 동일한 pluck 및 패치가 추가되었습니다. 이제 WP-CLI를 사용하여 프로그래밍 방식으로 WordPress 직렬화 된 데이터 를 업데이트하기위한 멋진 루프를 수행 할 수 있습니다


2
이것이 정답입니다.
Evan Mattson

6

다음은 bash 스크립트에서 수행하는 방법입니다.

wp option get wp_smtp_options --format=json | php -r '
$var = json_decode( fgets(STDIN) );
$var->from = "email@email.com";
$var->fromname = "me";
print json_encode($var);
' | wp option set wp_smtp_options --format=json

0

WP-CLI의 명령을 option사용 워드 프레스 '수행 옵션 API 의 작업을 할 수 있습니다. 예를 들어, 부속 명령으로update , 올바른 입력,을 사용하면 arrayWP-CLI를 사용하여이를 수행 할 수 있어야합니다. --format여기 에서 매개 변수를 사용해야 합니다. 동일한 결과를 얻으려면 json일반적으로 update부속 명령에 적합합니다 . get옵션 API가 사용되기 때문에 하위 명령 은 직렬화되지 않은 옵션을 반환해야합니다. 옵션 API를 사용하면 다른 / 새 설치에서 저장, 수정 및 / 또는 전송 / 설정할 수 있습니다.


작동하지 않습니다 : wp option get wp_smtp_options > savedconfiguration.txt wp option update wp_smtp_options < savedconfiguration.txt 첫 번째 명령은 배열로 저장하지만 두 번째 명령은 배열을 허용하지 않습니다. 먼저 직렬화해야한다고 생각합니다. 어떻게해야합니까?
lalo

format매개 변수를 활용하려고 했습니까 ? @lalo 편집 : 방금 당신이 알아 낸 것을 보았다 ..
Nicolai

wp-cli.org에서는 format매개 변수에 사용할 수있는 옵션이 무엇인지 말하지 않습니다 . 내 대답에 쓴 것처럼 중간 파일을 사용하지 않고도 가능할 수 있는지 궁금합니다.
lalo

format매개 변수에 대한 완전한 개요를 얻으려면 소스를 확인해야합니다. 매개 변수는 (하위) 명령과 (하위) 명령과 다릅니다. 예를 들어 bash 스크립트를 작성하고 데이터를 변수에 저장하면 가능합니다. @lalo
Nicolai

다음은 소스 코드이지만 --format사용 가능한 옵션 이 어디인지 이해하지 못합니다 . github.com/wp-cli/wp-cli/blob/master/php/commands/…
lalo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.