>  기사  >  CMS 튜토리얼  >  웹 애플리케이션 개발을 위한 WordPress 기능 살펴보기: URL 재작성 기능 잠금 해제

웹 애플리케이션 개발을 위한 WordPress 기능 살펴보기: URL 재작성 기능 잠금 해제

PHPz
PHPz원래의
2023-09-04 20:09:141196검색

최신 웹 애플리케이션 개발 프레임워크의 가장 좋은 점은 애플리케이션 구조의 개념적 모델에 매핑되는 정말 깔끔한 경로(또는 URL 체계)를 생성하는 방법을 제공한다는 것입니다.

예를 들어 특정 유형의 데이터(예: 개인)가 있는 경우 다음을 수행할 수 있습니다.

  • 추가
  • 업데이트
  • 삭제

잠깐.

애플리케이션의 성격에 따라 더 많은 작업(예: 배우자 추가)을 수행할 수 있지만 이 문서의 목적에 따르면 기본적인 CRUD 작업이면 충분합니다.

지금까지 관심을 가져주신 분들을 위해 WordPress가 애플리케이션 개발의 기반으로 제공하는 다양한 기능을 살펴보았습니다. 토론을 계속하면서 WordPress 재작성 규칙을 사용자 정의하는 데 사용할 수 있는 API를 살펴보는 것이 좋습니다.

일반 사용자는 WordPress 대시보드에서 URL 구성표를 변경하는 방법에 익숙할 수 있습니다(모두 동일한 페이지에 있는지 확인하기 위해 이에 대해 간략히 설명하겠습니다). 그러나 URL 구성표를 변경해야 하는 사용자를 위한 방법이 많이 있습니다. 더 많이 사용 가능합니다. WordPress의 URL 재작성에 대해 알아보세요.

실제로 우리는 최신 MVC 기반 프레임워크와 마찬가지로 일치하고 적용할 수 있는 URL 재작성 규칙을 구축할 수 있는 능력을 갖추고 있습니다.


재작성 규칙 이해하기

우리 모두가 동일한 페이지에 있는지 확인하려면 재작성 규칙을 특정 패턴을 웹 서버와 일치시켜 데이터베이스에서 데이터를 검색하는 방법으로 생각하세요.

예를 들어 표준 WordPress 설치에서 기본 고유 링크 구조는 다음과 같습니다.

으아악

이 URL에는 p=123의 키-값 쌍인 쿼리 문자열 매개변수가 포함되어 있습니다. 이는 WordPress의 맥락에서 "ID 123의 게시물 검색"을 의미합니다.

Permalink 설정 화면의 옵션을 자세히 살펴보면 다음과 같은 다양한 옵션도 볼 수 있습니다.

探索用于 Web 应用程序开发的 WordPress 功能:解锁 URL 重写功能

볼 수 있는 재작성 규칙의 또 다른 예는 '예쁜 영구 링크' 또는 WordPress 대시보드에 이름이 지정된 '게시물 이름'입니다.

이 형식에서 URL은 다음과 같습니다.

으아악

여기에서 요청된 URL은 웹 서버로 이동하며, 웹 서버는 일련의 규칙에 따라 해당 제목이 있는 게시물의 ID를 결정하고 이를 요청 클라이언트(예: 브라우저)에 반환합니다. p>

이 두 가지 예 사이에는 다시 작성 규칙이 무엇인지 정확하게 보여주는 기본 원칙이 있습니다.

간단히 말해서 재작성 규칙은 수신 URL을 클라이언트가 데이터베이스에서 정보를 검색하는 형식으로 변환하는 규칙 집합을 정의합니다.

물론, 이는 두 가지 질문을 제기합니다:

  1. 다시 쓰기 규칙은 어떻게 생성되나요?
  2. 더 중요한 것은 왜 그렇게 복잡할까요?

규칙을 다시 작성하는 사업

규칙을 다시 작성하는 것은 정규식을 기반으로 하기 때문에 개발자에게 어려운 작업입니다. Jamie Zawinski는 정규 표현식에 대해 다음과 같은 옛말을 남겼습니다.

어떤 사람들은 문제에 직면했을 때 "알겠습니다. 정규식을 사용하겠습니다"라고 생각합니다. 이제 그들은 두 가지 문제를 안고 있습니다.

재밌지만 사실이에요. 그렇기 때문에 WordPress에서 사용자 정의 재작성 규칙을 처리하는 것이 많은 개발자에게 어려울 수 있습니다.

안타깝게도 재작성 규칙이 만들거나 지원할 수 있는 URL 구성표의 모든 변형이나 유형을 보여줄 수는 없지만 시작하는 방법과 기초를 제공하는 방법 또는 미래를 안내하는 몇 가지 실제 예를 살펴볼 수 있습니다. 응용 프로그램이 작동하려면 수행해야 합니다.

재작성 규칙 새로고침

한 가지 주의할 점은 다시 쓰기 규칙을 정의할 때 즉시 적용되지 않고 이미 새로 고쳐진다는 것입니다. 이는 이전 규칙 세트를 삭제하고 새 규칙 세트로 교체해야 함을 의미합니다.

이를 달성하는 방법에는 두 가지가 있습니다:

  1. Permalink 설정대시보드에서 변경 사항 저장을 클릭할 수 있습니다. 옵션이 선택되더라도 애플리케이션의 functions.php 파일에 정의한 내용이 모두 사용됩니다.
  2. 전화$wp_rewrite->flush_rules();를 통해 프로그래밍 방식으로 문제를 해결할 수 있습니다.

어떤 경로를 선택하든 새로운 재작성 규칙을 정의할 때마다 이전 규칙을 새로 고쳐야 하므로 이 단계를 기억하는 것이 중요합니다.

다시 쓰기 API는 어떻게 작동하나요?

실제로 자체 재작성 규칙을 작성할 때 재작성 API의 작동 방식을 이해하는 것이 중요합니다.

4단계로 요약할 수 있습니다.

  1. 从网络服务器请求 URL。
  2. 如果请求的网址存在内容,则将返回该内容(可以是图像、字体或其他内容)。
  3. 如果内容不存在,则请求将被定向到 index.php,它将与网址的模式匹配。
  4. 内容随后将从 WordPress 返回到请求客户端。

如果您有兴趣根据固定链接仪表板中的配置查看重写规则的定义,请查看重写规则检查器插件。

此插件将呈现当前用于匹配指定 URL 模式的所有规则的列表,包括正则表达式和针对 index.php 的匹配变量。

探索用于 Web 应用程序开发的 WordPress 功能:解锁 URL 重写功能

有道理吗?如果没有,让我们看几个简单实用的示例。

重写规则的示例

鉴于我们知道模式将被匹配并传递到 index.php,我们可以利用 add_rewrite_rule 函数来定义自定义 URL 的工作方式。

帖子 ID 的简短标题

假设我们正在查看系统中的第一篇帖子,即 ID 为 1 的帖子。

在大多数普通 WordPress 安装中,这是Hello World,URL 通常为 http://domain.com/hello-worldhttp://domain.com/? p=1 取决于您的永久链接设置(即您当前的重写规则集)。

但是让我们定义一个规则,以便 http://domain.com/first 也将加载数据库中的第一篇文章:

function example_add_rewrite_rules() {

	add_rewrite_rule( 'first', 'index.php?p=1', 'top' );
	flush_rewrite_rules();

}
add_action( 'init', 'example_add_rewrite_rules' );

让我们再添加一条规则,该规则将允许我们在数据库中加载第二篇文章。即 http://domain.com/?p=2

function example_add_rewrite_rules() {

	add_rewrite_rule( 'first', 'index.php?p=1', 'top' );
	add_rewrite_rule( 'second', 'index.php?p=2', 'top' );

	flush_rewrite_rules();

}
add_action( 'init', 'example_add_rewrite_rules' );

假设您已经阅读了 add_rewrite 规则 的文档,这很容易理解,对吧?

简而言之,它接受三个参数:

  • 第一个参数是与请求的 URL 匹配的正则表达式。在我们的例子中,我们使用简单的单词。
  • 第二个参数是实际获取的 URL。同样,在我们的例子中,我们分别检索第一篇和第二篇帖子。
  • 最后,最后一个参数是优先级,可以是“top”或“bottom”。如果设置为“top”,则该规则将优先于所有其他规则进行评估;但是,如果为“bottom”,则将最后评估。

现在,这些示例都是基本的。这还不足以真正向我们展示如何设置自定义路由,例如我们在本文前面概述的路由。为此,我们需要看一些更复杂的表达式。

导入有关刷新重写规则的注释

但在我们开始这样做之前,需要注意的是,像我们上面所做的那样调用 flush_rewrite_rules() 实际上是一种不好的做法。它在上面的示例中有效,但实际上会减慢网站的加载时间。

事实上,它实际上只需要在重写规则发生变化时调用。每当激活插件时都可能会发生这种情况,或者当激活主题时它可能会发生变化。

无论如何,请确保正确挂钩函数,以便重写规则不会在每次加载页面时刷新 - 只要重写规则本身发生更改。


重写规则的更复杂方法

为了引入一组更复杂的重写规则,例如我们在本文前面通过 CRUD 操作详细介绍的重写规则,了解以下两个函数非常重要:

  • add_rewrite_tag 会让 WordPress 了解自定义查询字符串变量。这也与下一个函数结合使用。
  • add_rewrite_rule, 如前所述,将允许我们向 WordPress 添加额外的重写规则(以及设置它们的优先级)。

现在假设我们有一个名为个人的自定义帖子类型,它代表应用程序中的某个人。然后,假设个人还具有以下方法和相应的可用网址:

  • all: http://domain.com/individuals/
  • update: http://domain.com/individual/update/1 用于更新第一人称
  • delete: http://domain.com/individual/delete/1 用于删除第一个人

所以这个模式很简单,但是我们如何实现它呢?

首先,我们需要定义重写规则:

function example_add_rewrite_rules() {

	// Define the tag for the individual ID
	add_rewrite_tag( '%individual_id%', '([0-9]*)' );

	// Define the rules for each of the individuals
	add_rewrite_rule( '^individual/update/([0-9]*)', 'index.php?individual=update&individual_id=$matches[1]', 'top' );
	add_rewrite_rule( '^individual/delete/([0-9]*)', 'index.php?individual=delete&individual_id=$matches[1]', 'top' );

}
add_action( 'init', 'example_add_rewrite_rules' );

接下来,我们需要为每个人定义这些自定义函数,以便它们在调用时更新数据库中的正确记录。

在本例中,我们将定义两个函数 - 一个用于更新个人,另一个用于删除个人。以下代码还假设从浏览器提交的表单中将包含一些信息。

具体来说,它假设将发送个人 ID、名字、姓氏和其他信息,以便更新个人。

function example_process_individual( $input ) {

	if ( example_updating_user() ) {
		example_update_individual( $input );
	} else if ( 'true' == $input['delete_individual'] ) {
		example_delete_individual( $input['individual_id'] );
	}

}
if( ! is_admin() ) add_action( 'init', 'example_process_individual' );

function example_update_individual( $input ) {

	/* The incoming $input collection from an assumed form
	 * that will be used to update the user.
	 *
	 * It may include information such as the ID, the first name,
	 * last name, and so on.
	 *
	 * Upon success, use <code>wp_redirect</code> to go back to the homepage,  or reload
	 * the page to show an error.
	 */

}

function example_delete_individual( $individual_id ) {

	/* Use the incoming ID to locate the individual record and remove it
	 * from the database.
	 *
	 * Upon success, use <code>wp_redirect</code> to go back to the homepage,  or reload
	 * the page to show an error.
	 */

}

function example_updating_user() {
	return 0 == strpos( $_SERVER['REQUEST_URI'], '/individual/update' );
}

function example_deleting_user() {
	return 0 == strpos( $_SERVER['REQUEST_URI'], '/individual/delete' );
}

请注意,上面的第一个函数已挂接到 init 操作中,并且在用户未以管理员身份登录时触发。此外,还可以通过有条件地将其设置为仅在来自某个页面时加载来进一步增强此功能;然而,对于这个例子来说,它达到了它的目的。

接下来,阅读 UpdateDelete 函数的代码注释,了解它们应如何运行。

最后,请注意,最后两个函数是简单的帮助程序,旨在允许我们在初始挂钩函数中编写更清晰的代码。

有点不完整

我知道,这是一个不完整的示例,但对于一篇冗长的文章和一个复杂的主题,我的目标是尽我所能来展示 WordPress Rewrite API,讨论使用它的优点,并讨论如何使用它来创建更清晰的 URL 路由。

事实是,这仍然是一个具有挑战性的主题,并且最好通过实施来掌握。尽管如此,这是 WordPress 应用程序的另一个组件,使其可以作为 Web 应用程序开发的基础。


下一个

说了这么多,现在是时候讨论缓存的概念了。

当然,有很多可用于 WordPress 的缓存插件,但如果您是开发人员,您希望构建一定程度的本机缓存,并且您希望利用 WordPress API 来实现所以。如果是这种情况,熟悉可用的内容以及如何操作就很重要。

话虽如此,我们接下来将注意力转向 Transients API,以便我们可以自己处理一些本机缓存,并回顾这如何帮助第三方缓存机制使我们的应用程序更快。

위 내용은 웹 애플리케이션 개발을 위한 WordPress 기능 살펴보기: URL 재작성 기능 잠금 해제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.