ホームページ  >  記事  >  CMS チュートリアル  >  Web アプリケーション開発のための WordPress 機能を探索する: URL 書き換え機能のロックを解除する

Web アプリケーション開発のための WordPress 機能を探索する: URL 書き換え機能のロックを解除する

PHPz
PHPzオリジナル
2023-09-04 20:09:141195ブラウズ

最新の Web アプリケーション開発フレームワークの最も優れている点は、アプリケーション構造の概念モデルにマッピングする真にクリーンなルート (または URL スキーム) を生成する方法を提供することです。

たとえば、あるタイプのデータ (個人 など) が与えられた場合、次のことができます:

    ###に追加###
  • 更新
  • ###消去###
  • ###等。
  • アプリケーションの性質によっては、さらに多くの操作 (配偶者の追加など) を実行できる場合がありますが、この記事の目的では、基本的な CRUD 操作で十分です。
注目してくださっている方のために、WordPress がアプリケーション開発の基盤として提供するさまざまな機能について見てきました。議論を続ける中で、WordPress 書き換えルールのカスタマイズに利用できる API を見てみる価値があります。

通常のユーザーは、WordPress ダッシュボードで URL スキームを変更する方法に精通しているかもしれません (全員が同じ認識を持っていることを確認するために簡単に説明します)。ただし、URL スキームを変更する必要があるユーザーのために、さらに多目的にご利用いただけます。 WordPress での URL 書き換えについて学びます。

実際には、最新の MVC ベースのフレームワークと同様に、一致および適用する URL 書き換えルールを構築する機能があります。

書き換えルールを理解する

全員が同じ認識を持っていることを確認するには、書き換えルールを、データベースからデータを取得するために Web サーバーに特定のパターンを照合する方法であると考えてください。


たとえば、標準の WordPress インストールでは、デフォルトのパーマリンク構造は次のとおりです:

リーリー

この URL には、クエリ文字列パラメータである

p=123

のキーと値のペアが含まれています。これは、WordPress のコンテキストでは「ID 123 の投稿を取得する」ことを意味します。

「パーマリンク設定

」画面のオプションをドリルダウンすると、さまざまなオプションも表示されます:

リライト ルールのもう 1 つの例は、「プリティ パーマリンク」と呼ばれるもの、または WordPress ダッシュボードでの名前として「投稿名」です。

この形式では、URL は次のようになります:

リーリー 探索用于 Web 应用程序开发的 WordPress 功能:解锁 URL 重写功能 ここから、リクエストされた URL は Web サーバーに送信され、Web サーバーは一連のルールに基づいてそのタイトルの投稿の ID を決定し、それをリクエスト元のクライアント (つまり、ブラウザー) に返します。

これら 2 つの例の間には、書き換えルールが何であるかを正確に示す基本原則が働いています。

つまり、書き換えルールは、受信 URL をクライアントがデータベースから情報を取得する形式に変換する一連のルールを定義します。

もちろん、これには 2 つの疑問が生じます: p>

書き換えルールはどのように生成されるのでしょうか?

おそらくもっと重要なことは、なぜこれほど複雑なのかということです。

  1. ルール書き換えのビジネス
  2. ルールの書き換えは正規表現に基づいているため、開発者にとっては困難な場合があります。 Jamie Zawinski は正規表現について次のような古い格言を持っています:

問題に遭遇したときに、「わかった、正規表現を使おう」と考える人もいます。現在、彼らは 2 つの問題を抱えています。

面白いですが、本当です。これが、WordPress でカスタム書き換えルールを扱うことが多くの開発者にとって課題となる理由です。

残念ながら、リライト ルールが作成またはサポートできる URL スキームのすべてのバリエーションやタイプを示すことはできませんが、開始方法を示し、基礎を提供したり、何が必要なのかを示すガイドとなるいくつかの実践的な例を見てみましょう。今後の申請作業で行う予定です。

リフレッシュ書き換えルール

注意すべき点は、書き換えルールを定義しても、それらはすぐには有効にならず、すでにフラッシュされているということです。これは、古いルール セットを削除し、新しいルール セットに置き換える必要があることを意味します。

これを実現するには 2 つの方法があります:

[パーマリンク設定]

ダッシュボードで [

変更を保存]
    をクリックできます。オプションが選択されているにもかかわらず、アプリケーションの
  1. functions.php ファイルで定義した内容がすべて使用されます。 $wp_rewrite->flush_rules(); を呼び出して、プログラム的に問題を解決できます。 どのルートを選択する場合でも、新しい書き換えルールを定義するたびに古いルールを更新する必要があるため、この手順を覚えておくことが重要です。
  2. 書き換え 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,以便我们可以自己处理一些本机缓存,并回顾这如何帮助第三方缓存机制使我们的应用程序更快。

以上がWeb アプリケーション開発のための WordPress 機能を探索する: URL 書き換え機能のロックを解除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。