찾다

 >  Q&A  >  본문

PHP를 사용하여 foreach 문을 임시 항목에 넣을 수 있나요?

저는 PHP를 사용하여 WP에서 작업하고 있으며 많은 데이터를 가져오는 함수의 로드 시간을 줄이려고 노력하고 있습니다. Transients가 작동할 줄 알았는데 (아래와 같이) Transients에 강좌 쿼리를 로드했는데 foreach 문에서는 작동하지 않거나 오히려 제대로 작동하도록 설정하는 방법을 모르겠습니다.

모든 것을 느리게 만드는 주요 코드 부분은 각 주제의 Vimeo 동영상 ID를 가져와 vimeo_api() 함수를 통해 실행한 다음 동영상 길이를 가져온 다음 이를 주제 ID에 추가하는 foreach 문입니다. 배열 내부.

기술적으로는 get_vimeo_duration_all_courses() 함수가 필요하지 않지만(모든 강좌/수업/주제를 호출) 로드 시 각 주제에서 Vimeo ID를 가져옵니다. 이것이 제가 시작한 방법이고 작동하지만 안타깝게도 페이지 로드 시간이 늘어납니다. 내 생각은 배열 내의 모든 지속 시간을 로드하고 각 지속 시간을 주제 ID에 추가할 수 있다면 비디오 지속 시간을 가져올 때마다 vimeo_api() 함수를 호출할 필요가 없다는 것입니다. 또한 $vimeo 변수를 하루에 한 번 업데이트한 다음 $vimeo 변수에서 주제 ID를 검색하여 vimeo 기간을 얻을 수도 있습니다.

그래서 제가 올바른 방향으로 가고 있는지, 아니면 더 나은 방법을 알고 계시는지 알고 싶습니다.

vimeo_api() 함수가 매번 실행되지 않도록 $vimeo 변수와 그 안에 모든 값을 저장하는 방법이 있나요?

어떤 도움이라도 좋을 것입니다! 감사합니다

으아아아

여기서 Vimeo API를 받아 동영상 재생 시간을 반환합니다

으으으으

P粉352408038P粉352408038224일 전436

모든 응답(2)나는 대답할 것이다

  • P粉757432491

    P粉7574324912024-04-04 10:04:36

    WP_Query에서 반환된 개체를 임시로 저장하는 것은 의미가 없습니다. 이 개체는 WordPress 루프를 제어하는 ​​데 사용됩니다. 하지만 all_video_durations와 같은 과도 현상을 사용하는 것은 매우 의미가 있습니다. Transient는 모든 PHP 배열이나 객체의 데이터를 유지합니다.

    Transient는 비디오 서비스 API와 같이 얻기 어려운 값을 캐싱하는 데 적합합니다. 모든 WordPress 설치에서 작동하며 영구 객체 캐싱을 사용하는 설치에서 더 빠르게 실행됩니다.

    함께 묶는 대신 각 비디오 프로젝트마다 별도의 과도 효과를 사용할 수 있습니다. 이렇게 하면 새 프로젝트를 추가하면 코드가 좀 더 잘 작동하게 됩니다.

    (또한 cURL 대신 WordPress에 내장된 Requests 클래스를 사용하면 cURL을 올바르게 처리하지 않는 호스팅 서비스의 WordPress 설치에서 코드가 실행됩니다. cURL 코드를 플러그인 저장소에 제출하면, 리뷰어 교체하라는 요청을 받을 때도 있습니다. 가끔 제가 이걸 어떻게 아는지 물어보시죠 :-)

    회신하다
    0
  • P粉760675452

    P粉7606754522024-04-04 00:29:41

    여러분의 제안에 감사드립니다. 제가 올바른 방향으로 나아가는 데 큰 도움이 되었습니다. 결국 모든 클래스를 호출하는 함수를 제거하고 모든 Vimeo ID와 재생 시간을 호스팅하는 캐시 파일을 구축했습니다. 그런 다음 함수를 호출하면 먼저 캐시 파일을 검색하고 Vimeo ID를 찾으면 지속 시간을 가져오지만 ID를 찾지 못하면 API를 실행합니다.

    최종 코드는 다음과 같습니다...

    으아아아

    회신하다
    0
  • 취소회신하다