Perkara terbaik tentang rangka kerja pembangunan aplikasi web moden ialah ia menyediakan cara untuk menjana laluan yang benar-benar bersih (atau skema URL) yang memetakan kepada model konsep struktur aplikasi.
Sebagai contoh, diberikan jenis data tertentu (cth. Peribadi), anda boleh melakukan perkara berikut:
Tunggu.
Bergantung pada jenis permohonan anda, anda mungkin boleh melakukan lebih banyak operasi (seperti menambah pasangan), tetapi untuk tujuan artikel ini, operasi asas CRUD sudah memadai.
Bagi anda yang telah memberi perhatian, kami telah melihat pelbagai ciri yang ditawarkan WordPress sebagai asas untuk pembangunan aplikasi. Semasa kami meneruskan perbincangan kami, anda patut melihat API yang tersedia untuk menyesuaikan peraturan penulisan semula WordPress.
Pengguna biasa mungkin biasa dengan cara menukar skema URL di papan pemuka WordPress (kami akan membincangkan perkara ini secara ringkas untuk memastikan kami semua berada di halaman yang sama), namun, bagi mereka yang perlu menukar skema URL, terdapat banyak lebih tersedia untuk digunakan. Ketahui tentang penulisan semula URL dalam WordPress.
Malah, kami mempunyai keupayaan untuk membina peraturan penulisan semula URL untuk dipadankan dan dikuatkuasakan sama seperti rangka kerja berasaskan MVC moden.
Untuk memastikan kita semua berada pada halaman yang sama, fikirkan peraturan tulis semula sebagai cara memadankan corak tertentu ke pelayan web untuk mendapatkan semula data daripada pangkalan data.
Sebagai contoh, dalam pemasangan WordPress standard, struktur pautan kekal lalai adalah seperti berikut:
http://domain.com/?p=123
URL ini mengandungi parameter rentetan pertanyaan, yang merupakan pasangan nilai kunci p=123
, yang dalam konteks WordPress bermaksud "Retrieve post with ID 123". p=123
的键值对,在 WordPress 上下文中,它表示“检索 ID 为 123 的帖子”。
如果您深入查看固定链接设置屏幕上的选项,您还会看到各种选项:
您可能会看到的重写规则的另一个示例是所谓的“漂亮的永久链接”,或者如 WordPress 仪表板中所命名的“帖子名称”。
在此格式中,URL 如下所示:
http://domain.com/post-title/
从这里开始,请求的 URL 进入 Web 服务器,然后根据一组规则确定具有该标题的帖子的 ID,并将其返回给请求客户端(即浏览器)。 p>
在这两个示例之间,有一个基本原则在起作用,它准确地演示了重写规则是什么。
简而言之,重写规则定义了一组规则,其中传入的 URL 被转换为客户端从数据库检索信息的格式。
当然,这提出了两个问题:
重写规则对开发人员来说是一个挑战,因为它们基于正则表达式。 Jamie Zawinski 有一句关于正则表达式的老话:
有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
有趣,但却是事实。这就是为什么在 WordPress 中处理自定义重写规则对于许多开发人员来说是一个挑战。
不幸的是,我们无法演示重写规则可以创建或支持的 URL 架构的每种变体或类型,但我们可以看几个实际示例,这些示例展示了如何开始并提供基础或指导我们在未来的应用程序工作中需要做什么。
需要注意的一件事是,当您定义重写规则时,它们不会立即生效 - 它们已经被刷新。这意味着您需要删除旧的规则集,并将其替换为新的规则集。
有两种方法可以实现此目的:
functions.php
文件中定义的任何内容都将被使用。$wp_rewrite->flush_rules();
, anda juga akan melihat pelbagai pilihan:
Satu lagi contoh peraturan tulis semula yang mungkin anda lihat ialah apa yang dipanggil "pautan kekal cantik," atau seperti yang dinamakan dalam papan pemuka WordPress anda, "nama siaran."
Dalam format ini, URL kelihatan seperti ini:
function example_add_rewrite_rules() { add_rewrite_rule( 'first', 'index.php?p=1', 'top' ); flush_rewrite_rules(); } add_action( 'init', 'example_add_rewrite_rules' );
🎜Sesetengah orang apabila menghadapi masalah berfikir "Saya tahu, saya akan menggunakan ungkapan biasa". Sekarang mereka mempunyai dua masalah. 🎜🎜Lucu, tetapi benar. Inilah sebabnya mengapa berurusan dengan peraturan penulisan semula tersuai dalam WordPress boleh menjadi cabaran bagi banyak pembangun. 🎜 🎜Malangnya, kami tidak boleh menunjukkan setiap variasi atau jenis skema URL yang boleh dibuat atau disokong oleh peraturan penulisan semula, tetapi kami boleh melihat beberapa contoh praktikal yang menunjukkan cara untuk memulakan dan menyediakan asas atau membimbing kami pada masa hadapan perlu dilakukan agar aplikasi berfungsi. 🎜 🎜Segarkan semula peraturan tulis semula🎜 🎜Satu perkara yang perlu diambil perhatian ialah apabila anda mentakrifkan peraturan penulisan semula, peraturan tersebut tidak akan berkuat kuasa serta-merta - peraturan tersebut sudah disiram. Ini bermakna anda perlu memadamkan set peraturan lama dan menggantikannya dengan set peraturan baharu. 🎜 🎜Terdapat dua cara untuk mencapai ini: 🎜
functions.php
aplikasi anda akan digunakan. 🎜
🎜Anda boleh memanggil $wp_rewrite->flush_rules();
dan menyelesaikan masalah secara pemrograman. 🎜
🎜
🎜Tidak kira laluan mana yang anda pilih, adalah penting untuk mengingati langkah ini kerana setiap kali anda menentukan peraturan tulis semula baharu, anda perlu memuat semula peraturan lama. 🎜
🎜Bagaimanakah API penulisan semula berfungsi? 🎜
🎜Apabila sebenarnya menulis peraturan penulisan semula kami sendiri, adalah penting untuk memahami cara API tulis semula berfungsi. 🎜
🎜Ia boleh diringkaskan kepada empat langkah: 🎜
index.php
,它将与网址的模式匹配。如果您有兴趣根据固定链接仪表板中的配置查看重写规则的定义,请查看重写规则检查器插件。
此插件将呈现当前用于匹配指定 URL 模式的所有规则的列表,包括正则表达式和针对 index.php
的匹配变量。
有道理吗?如果没有,让我们看几个简单实用的示例。
鉴于我们知道模式将被匹配并传递到 index.php
,我们可以利用 add_rewrite_rule
函数来定义自定义 URL 的工作方式。
假设我们正在查看系统中的第一篇帖子,即 ID 为 1 的帖子。
在大多数普通 WordPress 安装中,这是Hello World,URL 通常为 http://domain.com/hello-world
或 http://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 规则
的文档,这很容易理解,对吧?
简而言之,它接受三个参数:
现在,这些示例都是基本的。这还不足以真正向我们展示如何设置自定义路由,例如我们在本文前面概述的路由。为此,我们需要看一些更复杂的表达式。
但在我们开始这样做之前,需要注意的是,像我们上面所做的那样调用 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
操作中,并且仅在用户未以管理员身份登录时触发。此外,还可以通过有条件地将其设置为仅在来自某个页面时加载来进一步增强此功能;然而,对于这个例子来说,它达到了它的目的。
接下来,阅读 Update
和 Delete
函数的代码注释,了解它们应如何运行。
最后,请注意,最后两个函数是简单的帮助程序,旨在允许我们在初始挂钩函数中编写更清晰的代码。
我知道,这是一个不完整的示例,但对于一篇冗长的文章和一个复杂的主题,我的目标是尽我所能来展示 WordPress Rewrite API,讨论使用它的优点,并讨论如何使用它来创建更清晰的 URL 路由。
事实是,这仍然是一个具有挑战性的主题,并且最好通过实施来掌握。尽管如此,这是 WordPress 应用程序的另一个组件,使其可以作为 Web 应用程序开发的基础。
说了这么多,现在是时候讨论缓存的概念了。
当然,有很多可用于 WordPress 的缓存插件,但如果您是开发人员,您希望构建一定程度的本机缓存,并且您希望利用 WordPress API 来实现所以。如果是这种情况,熟悉可用的内容以及如何操作就很重要。
话虽如此,我们接下来将注意力转向 Transients API,以便我们可以自己处理一些本机缓存,并回顾这如何帮助第三方缓存机制使我们的应用程序更快。
Atas ialah kandungan terperinci Terokai ciri WordPress untuk pembangunan aplikasi web: Buka kunci keupayaan menulis semula URL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!