탐색 건너뛰기

많은 테마는 일반적으로 ID를 기반으로 특별한 게시물, 페이지 및 카테고리를 특별히 표시합니다. 예를 들어 홈 페이지의 ‘추천’ 게시물 섹션이나 강조 표시된 카테고리를 예로 들 수 있습니다.

이러한 ID는 테마의 PHP에 하드코딩되어 있는 경우도 있고, 테마의 설정 화면에서 사용자가 선택하는 경우도 있습니다.

테마가 올바르게 표시되려면 언어별 ID를 선택해야 합니다. WPML에서는 언어가 변경되면 게시물, 페이지, 카테고리 및 태그의 ID가 변경되므로 테마는 활성 언어의 올바른 ID를 사용해야 합니다.

WPML에는 이를 달성하기 위한 두 가지 옵션이 있습니다.

자동 ID 조정을 활성화하거나 테마에서 wpml_object_id를 수동으로 사용할 수 있습니다.

어떤 옵션을 사용해야 하나요?

자동 ID 조정은 코드를 변경할 필요가 없습니다. 어떤 테마에서든 사용할 수 있으며 모든 것이 “그냥 작동”합니다. 단점은 WPML이 많은 함수에 연결하고 출력이 활성 언어에 맞는지 확인하기 때문에 처리 시간과 DB 액세스가 약간 증가한다는 점입니다.

wpml_object_id 함수를 사용하여 수동으로 ID를 조정하면 동일한 결과를 얻을 수 있으며 처리 측면에서 더 효율적일 수 있습니다. 그러나 테마에서 상당한 코딩이 필요합니다.

테마를 처음부터 새로 작성하는 경우 wpml_object_id를 사용하여 수동으로 작성하는 것이 좋습니다. 기존 테마로 시작하는 경우 테마를 해킹하고 수정하는 것은 현실적으로 불가능할 수 있으므로 자동 ID 조정 기능을 사용하는 것이 좋습니다.

어쨌든 캐시 플러그인을 사용하면 이 작업의 성능 영향이 전혀 없습니다. 모든 규모의 사이트에는 항상 캐시를 사용하는 것이 좋습니다. WPML은 WP Super CacheW3 Total Cache (다른 사이트에서도 사용)와 함께 잘 실행됩니다.

1) ID 자동 조정

WPML은 WordPress API 함수에 연결하여 특정 항목이 로드되는 시점을 감지하고 ID를 조정하여 활성 언어에 맞게 결과가 조정되도록 할 수 있습니다.

이 기능은 기본적으로 활성화되어 있으며 WPML언어를 통해 액세스할 수 있습니다:

다국어 기능을 위한 ID 조정

이렇게 하면 모든 ID가 자동으로 조정되며 API를 올바르게 사용하는 모든 워드프레스 테마(찾을 수 있는 거의 모든 테마)에서 사용할 수 있습니다.

2) 수동으로 wpml_object_id 함수 사용

또는 자동 ID 조정이 꺼져 있는 경우 wpml_object_id 함수를 사용하여 수동으로 동일한 작업을 수행할 수 있습니다.

apply_filters( ‘wpml_object_id’, int $element_id, 문자열 $element_type, bool $return_original_if_missing, mixed $ulanguage_code )

>참고: WPML 버전 DeepL =3.2의 경우 wpml_object_id 필터 훅을 사용하세요. WPML 3.3부터 icl_object_id 함수는 더 이상 사용되지 않는 것으로 태그가 지정되어 3.3에서 완전히 제거되었습니다.

사용 예

echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

카테고리 ID 4에 대한 현재 언어로 된 카테고리 ID를 반환합니다. 번역이 누락된 경우 원본을 반환합니다(여기서는 카테고리 ID 4).

다른 예시를 보려면 API 페이지를 확인하고 사용법에 대한 자세한 정보를 확인하세요.

ID 배열 번역 가능

전체 개체 ID 배열(가장 일반적으로 카테고리 ID)을 변환해야 하는 경우가 많습니다. 이를 위해 다음 기능을 사용할 수 있습니다:

function lang_object_ids($object_id, $type) {
    if( is_array( $object_id ) ){
        $translated_object_ids = array();
        foreach ( $object_id as $id ) {
            $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language );
        }
        return $translated_object_ids;
    } else {
  return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language );
 }
}

이 함수는 객체 유형도 인수로 받아들입니다.

예를 들어 카테고리 1,3 및 6에 대한 카테고리 ID 배열을 가져오려면 호출합니다:

lang_object_ids(array(1,3,6),'category')

다른 언어로 페이지 요소 표시하기

선택 사항인 ulanguage_code 매개변수를 사용하면 서로 다른 언어로 된 페이지 요소를 혼합할 수 있습니다.

예를 들어 이미지 갤러리가 있는데 언어별로 이미지를 복제하지 않으려면 이 방법을 따르세요:

  1. 갤러리가 존재하는 언어로 된 페이지의 ID를 가져옵니다.
  2. 해당 페이지의 이미지를 반복하여 표시합니다.