UFO ET IT

wordpress 테마, 플뤼그 등에 의해 저장된 기본 인코딩 문자열 내부의 localhost URL 대체

ufoet 2023. 6. 22. 23:21
반응형

wordpress 테마, 플뤼그 등에 의해 저장된 기본 인코딩 문자열 내부의 localhost URL 대체

로컬 호스트에서 라이브 서버로 워드프레스 사이트를 호스팅하려면 모든 로컬 호스트 URL을 라이브 도메인 URL로 변경해야 합니다.완료 및 사이트도 정상적으로 로드되지만 기본 인코딩 문자열 내부에 있는 미디어 항목은 표시되지 않습니다.

하지만 테마와 다른 플러그인에 의해 저장된 기본 인코딩 문자열 내부의 URL을 대체하는 방법은 무엇입니까?

나의 경우, 나는 실제 페이지 내용과 DB에 인코딩된 저장된 베이스를 포함하는 BeTheme 및 비주얼 작곡가를 사용하고 있습니다.여기에는 많은 미디어 항목의 하드 코드화된 전체 URL이 포함되어 있습니다.

.sql 파일의 db 덤프를 가져와서 모든 localhost를 찾아서 라이브 도메인 url로 바꿨습니다...하지만 여기가 제가 처박힌 곳입니다!

저는 같은 문제에 직면했고 이것을 할 수 있는 방법을 찾았습니다.제 예는 wp_postmeta 테이블과 머핀의 일부 테마에 대한 것입니다.

요구 사항:

  • 일부 검색 대체 플러그인(예: https://wordpress.org/plugins/search-and-replace/ )
  • from_base64() 함수(5.6.1 이상)가 있는 MySQL 버전
  • (선택 사항 포함) 대용량 테이블에 대한 base64를 디코딩하면 DB 서버가 슬퍼지기 때문에 디코딩할 행을 식별하는 일부 meta_key.

단계:

  1. 데이터베이스 백업(!!)

  2. wp_postmeta와 동일한 레이아웃의 테이블을 만듭니다.

    CREATE TABLE wp_base64_dec LIKE wp_postmeta
    
  3. wp-postmeta에서 선택한 base64_decoded 값을 새 테이블에 삽입합니다.

    INSERT INTO wp_base64_dec(`meta_id`, `post_id`,`meta_key`,`meta_value`)
    SELECT `wp_postmeta`.`meta_id` AS `meta_id`,
      `wp_postmeta`.`post_id` AS `post_id`,
      `wp_postmeta`.`meta_key` AS `meta_key`,
       FROM_BASE64(`wp_postmeta`.`meta_value`) AS `meta_value` 
    FROM `wp_postmeta` WHERE 
      ((`wp_postmeta`.`meta_key` = 'mfn-page-items') AND
      (FROM_BASE64(`wp_postmeta`.`meta_value`) LIKE '%domain.net%')) ;
    
  4. wp에서 search-replace 플러그인을 사용하여 "domain.net "을 "domain.com "로 바꿉니다.wp_base64_dec테이블.

  5. 원래 테이블의 변경된 열 바꾸기:

    REPLACE wp_postmeta
    SELECT 
      `meta_id`,`post_id`,`meta_key`,
       TO_BASE64(`meta_value`) as `meta_value`
    FROM `wp_base64_dec`
    

간단히 말하면, 할 수 없다는 것입니다.Visual Composer는 도움이 되기 위해 데이터베이스의 URL을 인코딩합니다.검색 및 교체(wp-cli 버전 포함)는 이러한 작업에서 작동하지 않습니다.WP 베이커리는 이를 알고 있지만 솔루션을 제공하지 않고 있습니다.

어떤 이유에서인지 @frater_sourcecode answer를 적용한 후 URL을 교체할 때 지정된 문자열 길이가 일치하지 않아서 serializing 오류가 발생했습니다.

공식 머핀 빌더 URL 대체 도구가 있습니다.

https://muffingroup.com/plugins/mfn-migrate-cb.zip

이것은 WordPress 플러그인입니다.
왜 어디에도 언급되지 않는지 모르겠지만, 레딧에서 찾았습니다.

원천

완벽한 솔루션을 위한 @frater_sourcecode 덕분입니다.저는 재배치 지시를 존중하지 않는 WPML 플러그인에 그것을 채택합니다.

코드는 다음과 같습니다.

  1. 새 테이블 만들기
CREATE TABLE wp_icl_translate_base64_dec LIKE wp_icl_translate;
  1. copy+copy base64 코드화된 레코드
INSERT INTO wp_icl_translate_base64_dec(`tid`,`job_id`,`content_id`,`timestamp`,`field_type`,`field_wrap_tag`,`field_format`,`field_translate`,`field_data`,`field_data_translated`,`field_finished`)
SELECT
`wp_icl_translate`.`tid` AS `tid`,
`wp_icl_translate`.`job_id` AS `job_id`,
`wp_icl_translate`.`content_id` AS `content_id`,
`wp_icl_translate`.`timestamp` AS `timestamp` ,
`wp_icl_translate`.`field_type` AS `field_type`,
`wp_icl_translate`.`field_wrap_tag` AS `field_wrap_tag`,
`wp_icl_translate`.`field_format` AS `field_format` ,
`wp_icl_translate`.`field_translate` AS `field_translate`,
FROM_BASE64(`wp_icl_translate`.`field_data`) AS `field_data`,
FROM_BASE64(`wp_icl_translate`.`field_data_translated`) AS `field_data_translated`,
`wp_icl_translate`.`field_finished` AS `field_finished`
FROM `wp_icl_translate` WHERE
(`wp_icl_translate`.`field_format`= 'base64');
  1. 콘솔 URL 변경에서 실행
/usr/local/bin/wp search-replace --all-tables "https://example.com" "https://newsite.com" --dry-run

(!! --dry-run 여기서는 데모용으로만 사용합니다!!)

  1. 원래 WPML 테이블의 레코드 업데이트
REPLACE `wp_icl_translate`
SELECT `tid`,`job_id`,`content_id`,`timestamp`,`field_type`,`field_wrap_tag`,`field_format`,`field_translate`,
TO_BASE64(`field_data`) as `field_data`,
TO_BASE64(`field_data_translated`) as `field_data_translated`,
`field_finished`
FROM `wp_icl_translate_base64_dec`;
  1. 임시 테이블 wp_icl_translate_base64_dec 삭제

phpmyadmin에서 데이터베이스를 내보내면 직렬화된 데이터를 얻을 수 있습니다.내보내기를 위해서는 플러그인을 사용해야 합니다.

wp migrate db는 당신을 위한 훌륭한 플러그인입니다.

https://wordpress.org/plugins/wp-migrate-db/

언급URL : https://stackoverflow.com/questions/30634716/wordpress-replacing-localhost-urls-inside-base-encoded-strings-saved-by-theme-p

반응형