> 웹 프론트엔드 > CSS 튜토리얼 > 거의 헤드리스 워드 프레스 웹 사이트를 구축하는 방법

거의 헤드리스 워드 프레스 웹 사이트를 구축하는 방법

Christopher Nolan
풀어 주다: 2025-03-18 10:29:09
원래의
358명이 탐색했습니다.

거의 헤드리스 워드 프레스 웹 사이트를 구축하는 방법

전통적인 WordPress 테마는 정적 웹 사이트 또는 헤드리스 웹 응용 프로그램만큼 효율적으로 실행될 수 있습니다. 대부분의 WordPress 웹 사이트는 전통적인 WordPress 테마를 사용하여 구축되었습니다. 이러한 웹 사이트 중 다수는 캐싱 계층과 의존성 최적화가 우수하여 상당히 빠르게 실행됩니다. 그러나 개발자로서 우리는 웹 사이트에 대한 더 나은 결과를 만들 수있는 방법을 마스터했습니다. Headless WordPress를 사용하면 많은 웹 사이트가 더 빠른로드, 더 나은 사용자 상호 작용 및 페이지 간의 원활한 전환을 달성 할 수 있습니다.

문제는 다음과 같습니다. 유지 보수. 또 다른 가능성을 보여 드리겠습니다!

먼저 내가 "전통적인"WordPress, "Headless"WordPress 및 "거의 헤드리스"WordPress에 대해 말하는 내용을 먼저 정의해 봅시다.

전통적인 WordPress 웹 사이트

전통적으로 WordPress 웹 사이트는 PHP를 사용하여 페이지에서 HTML 태그를 렌더링합니다. 링크를 클릭 할 때마다 브라우저는 서버에 다른 요청을 보내고 PHP는 클릭 된 웹 사이트의 HTML 태그를 렌더링합니다.

이것은 대부분의 웹 사이트에서 사용하는 방법입니다. 유지 관리가 가장 쉽고 기술적 인 복잡성이 가장 낮으며 올바른 서버 측 캐싱 도구를 사용하며 잘 수행합니다. 문제는 전통적인 웹 사이트이기 때문에 전통적인 웹 사이트처럼 느껴집니다 . 이러한 유형의 웹 사이트에서 전환, 효과 및 기타 세련된 현대적인 기능은 종종 구축 및 유지 관리가 더 어렵습니다.

이점:

  1. 웹 사이트는 유지하기 쉽습니다.
  2. 기술은 비교적 간단합니다.
  3. WordPress 플러그인과의 호환성이 좋습니다.

결점:

  1. 사회가 브라우저에서 앱과 같은 경험을 기대함에 따라 웹 사이트는 약간 구식으로 보일 수 있습니다.
  2. 웹 사이트는 JavaScript 프레임 워크를 사용하여 웹 사이트의 동작을 제어하지 않기 때문에 JavaScript는 종종 쓰기 및 유지 관리가 더 어렵습니다.
  3. 전통적인 웹 사이트는 헤드리스 및 거의 헤드리스 옵션보다 느리게 실행되는 경향이 있습니다.

헤드리스 워드 프레스 웹 사이트

Headless WordPress 웹 사이트는 최신 JavaScript와 WordPress REST API 또는 GraphQL과 같은 일종의 서버 측 RESTFUL 서비스를 사용합니다. PHP에서 HTML을 구축하고 렌더링하는 대신 서버가 최소한의 HTML을 보내고 웹 사이트의 모든 페이지의 렌더링을 처리하는 큰 JavaScript 파일입니다. 이 접근법은 페이지를 더 빨리로드하고 페이지간에 정말 멋진 전환 및 기타 재미있는 기능을 만들 수있는 기회를 제공합니다.

무슨 말을하든 대부분 의 헤드리스 워드 프레스 사이트는 개발자가 큰 변경을 해야합니다 . 양식 플러그인을 설치하고 싶으십니까? 죄송합니다. 개발자를 설정하려면 개발자가 필요할 수 있습니다. 새 SEO 플러그인을 설치하고 싶으십니까? 아니요, 개발자는 응용 프로그램을 변경해야합니다. 그 멋진 블록을 사용하고 싶습니까? 너무 나쁘다 - 먼저 개발자가 필요합니다.

이점:

  1. 웹 사이트 자체는 현대적이고 빠르게 느껴질 것입니다.
  2. WordPress 외부의 다른 편안한 서비스와 쉽게 통합 할 수 있습니다.
  3. 전체 웹 사이트는 JavaScript로 구축되어 복잡한 웹 사이트를보다 쉽게 ​​구축 할 수 있습니다.

결점:

  1. WordPress 플러그인이 제공하는 많은 기능을 상자 밖으로 나누어야합니다.
  2. 이 설정은 유지하기가 어렵습니다.
  3. 호스팅은 복잡하며 다른 옵션에 비해 비용이 많이들 수 있습니다.

WordPress와 정적 호스팅의 차이점을보다 심도있게 비교하면 "WordPress and Jamstack"을 참조하십시오.

나는 헤드리스 워드 프레스가 만들 수있는 결과를 좋아합니다. 나는 유지 보수를 좋아하지 않습니다. 나는 빠른 로딩 속도, 페이지 사이의 전환과 웹 사이트의 전체 앱과 같은 느낌을 가질 수있는 웹 응용 프로그램을 원합니다. 그러나 나는 또한 WordPress를 인기있게 만드는 플러그인 생태계를 자유롭게 사용할 수 있기를 원합니다. 나는 머리가없는 것을 원한다. 거의 머리가 없습니다 .

이 설명에 맞는 것을 찾을 수 없었기 때문에 하나를 만들었습니다. 그 이후로 저는이 접근법을 사용하는 여러 웹 사이트를 구축하고 필요한 JavaScript 라이브러리를 구축하여 다른 사람들이 자신의 거의 머리가 거의없는 WordPress 테마를 쉽게 만들 수 있습니다.

거의 헤드리스 워드 프레스 소개

거의 Headless는 Headless 접근 방식으로 가져온 유사한 응용 프로그램의 많은 이점과 전통적인 WordPress 테마를 사용하는 개발의 용이성을 제공하는 WordPress 웹 개발 방법입니다. 라우팅을 처리하고 웹 사이트를 헤드리스 애플리케이션처럼 렌더링하는 작은 JavaScript 응용 프로그램으로 수행하지만 일반적인 WordPress 요청과 동일한 페이지를 로드 할 수있는 폴백 메커니즘이 있습니다. 폴백 메소드를 사용하여로드 할 페이지를 선택할 수 있으며 JavaScript 또는 PHP에 로직을 주입하여 페이지를 이와 같이로드 해야하는지 확인할 수 있습니다.

내가 만든 데모 웹 사이트에서 실제로 어떻게 작동하는지 알 수 있습니다.

예를 들어,이 방법을 구현하는 웹 사이트는 Lifterlms라는 학습 관리 시스템을 사용하여 WordPress 과정을 온라인으로 판매합니다. 이 플러그인에는 내장 전자 상거래 기능이 있으며 호스팅 코스 컨텐츠를 설정하여 Paywall 뒤에 놓는 데 필요한 인터페이스가 있습니다. 이 사이트는 Lifterlms의 많은 내장 기능을 사용합니다. 그 중 상당 부분은 체크 아웃 카트입니다. 응용 프로그램에서 전체 페이지를 재구성하는 대신 폴백 메소드를 사용하여로드하도록 간단히 설정했습니다. 따라서이 페이지는 오래된 WordPress 테마처럼 작동하므로 예상대로 정확하게 작동합니다.

이점:

  1. 일단 설치되면 유지하기가 쉽습니다.
  2. 호스팅은 일반적인 WordPress 테마만큼 쉽습니다.
  3. 웹 사이트는 헤드리스 웹 사이트만큼 현대적이고 빠릅니다.

결점:

  1. 웹 사이트를 렌더링하는 두 가지 방법을 항상 고려해야합니다.
  2. 이 방법에는 효과적인 JavaScript 라이브러리에 대한 선택이 제한되어 있습니다.
  3. 이 응용 프로그램은 WordPress와 밀접하게 연결되어 있으므로 타사 REST API를 사용하는 것은 헤드리스보다 더 어렵습니다.

작동 방식

거의 머리가 없으려면 다음을 포함하여 여러 작업을 수행 할 수있는 기능이 필요합니다.

  1. WordPress 요청을 사용하여 페이지를로드하고
  2. JavaScript를 사용하여 페이지로드,
  3. 렌더링 방식에 관계없이 페이지가 동일하게
  4. JavaScript 또는 PHP를 사용하여 페이지를로드 할시기를 알 수있는 방법을 제공하고
  5. JavaScript 또는 PHP로 렌더링 되든 모든 라우팅 페이지의 100% 일관성을 확인하십시오.

이를 통해 웹 사이트는 점진적인 향상을 활용할 수 있습니다. 페이지는 JavaScript의 유무에 관계없이 볼 수 있으므로 요청한 요청에 따라 가장 적합한 버전을 사용할 수 있습니다. 웹 사이트를 크롤링하는 신뢰할 수있는 봇이 있습니까? 호환성을 보장하기 위해 자바 스크립트 버전을 보내십시오. 예상대로 체크 아웃 페이지가 작동하지 않습니까? 응용 프로그램없이로드하도록 일시적으로 강제하고 나중에 수정하십시오.

이러한 프로젝트를 완료하기 위해 조립식 보일러 플레이트가 포함 된 Nicholas라는 오픈 소스 라이브러리를 발표했습니다.

건조하게 유지하십시오

거의 헤드리스 애플리케이션을 구축 할 때 극복하고 싶은 가장 큰 문제는 PHP 및 JavaScript의 페이지 렌더링을 일관되게 유지하는 것입니다. 두 곳에서 마크 업을 구축하고 유지하고 싶지 않습니다 . 가능한 한 많은 단일 소스 코드를 사용하고 싶습니다. 이것은 내가 실제로 사용할 수있는 JavaScript 라이브러리를 즉시 제한합니다 (죄송합니다, React!). 약간의 연구와 많은 실험 후에, 나는 Alpinejs를 사용하게되었습니다. 이 라이브러리는 내 코드를 마른 그럴듯하게 유지합니다. 일부 부품은 각 부품에 대해 절대적으로 다시 작성 해야하지만 (예 : 루핑), 가장 중요한 마크 업 블록은 재사용 할 수 있습니다.

PHP를 사용하여 렌더링 된 단일 게시물 템플릿은 다음과 같습니다.

 <code><?php if ( have_posts() ) { while ( have_posts() ) { the_post(); if ( is_singular() ) { echo nicholas()-?>templates()->get_template( 'index', 'post', [ 'content' => Nicholas::get_buffer( 'the_content' ), 'title' => Nicholas::get_buffer( 'the_title' ), ] ); } } } ?></code>
로그인 후 복사

Alpine의 JavaScript를 사용하여 렌더링 된 동일한 게시물 템플릿 :

<code><template :key="index" x-for="(post, index) in $store.posts"> = niccholas ()-> templates ()-> get_template ( 'index', 'post')?>
</template></code>
로그인 후 복사

모두 동일한 PHP 템플릿을 사용하므로 실제 루프 내부의 모든 코드가 건조합니다.

 <code>$title = $template->get_param( 'title', '' ); // 获取传递到此模板的标题,回退到空字符串。 $content = $template->get_param( 'content', '' ); // 获取传递到此模板的内容,回退到空字符串。 ?></code> = $ 제목?>

  <div x-html="content">= $ content?></div>
로그인 후 복사

관련 : 이 alpine.js 방법은 "WordPress 테마에서 VUE 구성 요소를 구축하는 방법"에서 Jonathan Land가 소개 한 vue.js 방법과 정신적으로 유사합니다.

페이지가 호환 모드로 실행되는시기를 감지하십시오

"호환성 모드"를 사용하면 웹 사이트에서 Headless 버전의 JavaScript를 실행 하지 않고도 모든 요청을로드 할 수 있습니다. 페이지가 호환성 모드에서로드되도록 설정되면 페이지는 PHP에서만로드되며 응용 프로그램 스크립트는 절대 대기열이 아닙니다. 이를 통해 "질문 페이지"는 앱을 사용할 때 예상대로 작동하지 않는 것을 다시 작성하지 않고 실행할 수 있습니다.

페이지를 호환 모드로 실행하도록 강제로 실행할 수있는 여러 가지 방법이 있습니다. 일부는 코드가 필요하며 일부는 그렇지 않습니다. Nicholas는 포스트가 호환 모드에서로드하도록 강요하는 게시물 유형에 토글 스위치를 추가합니다.

그 외에도 URL을 수동으로 추가하여 Nicholas 설정에서 호환 모드로로드하도록 강제로 추가 할 수 있습니다.

이것은 좋은 시작이지만, 게시물에 저장된 블록을 기반으로 페이지를 호환 모드로로드 해야하는시기를 자동으로 감지 할 수 있음을 발견했습니다. 예를 들어, 웹 사이트에 닌자 양식이 설치되어 있고 자신의 자바 스크립트를 재현하는 대신 제공하는 유효성 검사 자바 스크립트를 사용하려고합니다. 이 경우 닌자 양식이 포함 된 모든 페이지에서 호환 모드를 사용하도록 강요해야합니다. 각 URL을 하나씩 수동으로 추가하거나 쿼리를 사용하여 닌자 양식 블록으로 페이지의 모든 것을 가져올 수 있습니다. 예를 들어:

 <code>add_filter( 'nicholas/compatibility_mode_urls', function ( $urls ) { // 过滤Ninja Forms块$filtered_urls = Nicholas::get_urls_for_query( [ 'post_type' => 'any', 's' => 'wp:ninja-forms/form', // 查找Ninja Forms块] ); return array_merge( $urls, $filtered_urls ); } );</code>
로그인 후 복사

닌자 양식 블록이 포함 된 모든 페이지를 호환성 모드를 사용하여로드 할 URL 목록에 자동으로 추가합니다. 이것은 WP_Query 매개 변수를 사용하는 것입니다. 따라서 여기에 원하는 것을 전달하여 목록에 추가해야 할 사항을 결정할 수 있습니다.

응용 프로그램을 확장하십시오

무대 뒤에서 Nicholas는 Express Applications가 미들웨어를 처리하는 방식과 마찬가지로 미들웨어 모드를 사용하여 확장 할 수있는 경량 라우터를 사용합니다. 클릭 페이지가 라우팅되면 시스템은 각 미들웨어 항목을 실행하고 마지막으로 페이지를 라우팅합니다. 기본적으로 라우터에는 아무것도하지 않습니다 .

기본 예는 다음과 같습니다.

 <code>// 导入WordPress特定的中间件import { updateAdminBar, validateAdminPage, validateCompatibilityMode } from 'nicholas-wp/middlewares' // 导入通用中间件import { addRouteActions, handleClickMiddleware, setupRouter, validateMiddleware } from "nicholas-router"; // 按此顺序执行这些操作,当页面被路由时。 addRouteActions( // 首先,验证URL validateMiddleware, // 验证此页面不是管理页面validateAdminPage, // 验证此页面不需要兼容模式validateCompatibilityMode, // 然后,我们更新Alpine存储updateStore, // 如果启用,则可能获取评论fetchComments, // 更新历史记录updateHistory, // 可能更新管理栏updateAdminBar ) // 设置路由器。这也使用中间件模式。 setupRouter( // 为点击设置事件监听器handleClickMiddleware )</code>
로그인 후 복사

여기에서 페이지를 라우팅 할 때 발생하는 일을 확장 할 수 있습니다. 코드를 강조하기 위해 페이지를 스캔하고 싶거나 변경하고 싶을 수도 있습니다. 태그의 내용은 새 경로의 페이지와 일치하는 것입니다. 캐시 레이어조차 도입 할 수 있습니다. 무엇을 해야하는지 AddRouteAction 또는 SetUprouter를 사용하여 필요한 작업을 추가하십시오.

다음 단계

다음은 거의 머리가없는 접근 방식을 구현하는 데 사용되는 주요 구성 요소에 대한 간단한 개요입니다. 더 많은 정보를 얻는 데 관심이 있다면 WP Dev Academy에서 코스를 수강하는 것이 좋습니다. 이 과정은 최신 도구를 사용하여 거의 헤드리스 워드 프레스 웹 사이트를 구축하는 방법에 대한 단계별 가이드입니다. 또한 자신의 프로젝트를 시작하는 데 도움이되는 거의 머리가없는 보일러 플레이트를 확인하는 것이 좋습니다.

위 내용은 거의 헤드리스 워드 프레스 웹 사이트를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿