博客

  • 如何提升WordPress站内搜索速度及结果准确率

    如何提升WordPress站内搜索速度及结果准确率

    为什么人们首先使用网站搜索表单?这是因为他们正在寻找通过浏览网站或使用导航无法获得的即时和相关结果。

    有时,这些搜索结果会提供他们问题的答案(例如有关公司退货政策的信息)或匹配产品或内容的列表(例如与页面构建器插件相关的博客文章)。不过,无论他们在寻找什么,有一件事是肯定的:

    访问者希望您的WordPress搜索表单能够快速准确地提供结果。

    当您从整体上看待消费者行为时,这是有道理的。谷歌在在线搜索方面设定了一个几乎不可能的标准。根据SparkToro的调查结果,Google中超过一半的搜索都是零点击的。基本上,谷歌已经使搜索变得如此高效,以至于人们通常不需要访问网站来获得他们问题的答案。

    当然,您的网站访问者并没有使用内部搜索来期待或想要零点击结果。他们正在使用搜索来查找您网站的其他部分进行探索。但是,你的WordPress的搜索和谷歌搜索的共同点是:消费者想要快速,方便,并从他们两个中找到相关的结果。

    只有一个问题:WordPress自带的搜索功能不是很好。

    这就是为什么在本教程中,我们将探索您需要了解的一切,以优化访问者的WordPress搜索体验

    1. 内部搜索到底有多重要?
    2. 如何将搜索添加到您的WordPress网站
    3. 如何改善内部WordPress搜索体验

    内部搜索到底有多重要?

    如果您以正确的方式设计网站,访问者自然会遵循您在他们面前布置的路径。一个组织良好的菜单也有帮助。

    也就是说,内部搜索在这方面发挥着重要作用。

    将WordPress搜索视为您网站的快速通行证。当您的搜索功能按其应有的方式执行时,它可以在几秒钟内将您的访问者从第1步带到第5步。

    这对于包含大量内容的 WordPress 网站特别有用。这里有些例子:

    电子商务

    Nordic Ware等在线商店可以帮助访问者从主页访问:

    Nordic Ware:主页在标题中带有搜索栏

    Nordic Ware:主页在标题中带有搜索栏

    只需使用网站右上角的搜索栏即可获得更窄的产品列表:

    Nordic Ware:搜索结果页面

    Nordic Ware:搜索结果页面

    通过始终显示产品搜索表单,访客无需筛选商店的菜单或类别来查找他们正在购买的特定商品。

    博客、播客和新闻网站

    拥有大型内容存储库的网站(例如闪电博有36页的WordPree教程技巧文章(并且还在不断增加))将从搜索栏中受益:

    闪电博:WordPress教程技巧分页

    闪电博:WordPress教程技巧分页

    通过在文章列表顶部放置一个特定于资源中心的搜索表单,读者可以比滚动36页更快地找到他们正在寻找的主题:

    闪电博资源中心列表顶部的WordPress搜索栏

    闪电博资源中心列表顶部的WordPress搜索栏

    包含大量内容的资源中心可能会变得难以导航。由于您希望保持博客页面简短以保持较高的加载速度,因此增加出现的文章数量并不是一个好主意。

    相反,搜索栏将帮助您的访问者更有效地浏览与其当前兴趣无关的文章。

    在线目录站点

    搜索是访问者在在线目录列表(例如房地产、旅游、专业服务等)的网站上做的第一件事,就像来自Trulia的这个例子:

    Trulia:主页搜索属性

    Trulia:主页搜索属性

    搜索元素总是很简单,可以开始。例如,指定地点、人名或职位。但是结果页面始终允许用户根据需要过滤结果:

    Trulia:示例搜索结果页面

    Trulia:示例搜索结果页面

    知识库

    搜索是Elementor等产品的帮助中心和知识库的有用组件:

    Elementor:知识库文章主题和计数

    Elementor:知识库文章主题和计数

    与手动搜索类别相比,搜索可帮助用户更快地找到问题的答案:

    Elementor:在文档中搜索“模板”

    Elementor:在文档中搜索“模板”

    在很多情况下,用户在使用SaaS产品时遇到的问题可以很容易地由用户自己解决。如果您想让实时聊天和帮助台支持远离易于解决的问题,请使您的知识库易于搜索。

    Bottom Line

    如果有大量的东西在您的网站,不要假设导航将帮助游客努力通过自己的方式吧。建立类似快速通行证的搜索体验,让他们准确地到达他们需要和想去的地方。

    如何将搜索添加到您的WordPress网站

    您有几个选项可以为您的网站实施和启用基本的WordPress搜索:

    使用您的主题将WordPress搜索添加到菜单中

    根据您安装的WordPress主题,您只需点击几下即可将搜索添加到您的菜单中。在这个例子中,我使用了Astra主题,顺便说一句,结果非常快!

    首先要做的是转到外观>自定义:

    WordPress – 导航到自定义菜单

    WordPress – 导航到自定义菜单

    接下来,转到标题> 主菜单。

    WordPress – 自定义菜单

    WordPress – 自定义菜单

    在“菜单中的最后一项”下,从下拉菜单中选择“搜索”。

    WordPress – 在菜单中添加搜索栏

    WordPress – 在菜单中添加搜索栏

    这将添加一个搜索图标和栏作为导航菜单的最后一个元素。

    WordPress – 添加了主题设置的搜索栏

    WordPress – 添加了主题设置的搜索栏

    使用其他WordPress主题时,此搜索激活设置可能与您的主题定制器不在同一位置。如果它可用,您会在“标题”设置下找到它。否则,您必须使用以下选项之一手动添加它。

    使用WordPress小工具添加搜索

    WordPress小工具使您能够将内容添加到内容周围元素(如侧边栏和页脚)中的专用块中。

    您可以使用WordPress小工具创建的一种内容块是搜索栏。

    首先在外观菜单下找到小部件:

    WordPress – 找到小工具菜单

    WordPress – 找到小工具菜单

    您可以在此处找到所有可用的小部件部分。根据您使用的主题或模板,您可能只会看到侧边栏或页脚,或者您可能会看到更全面的选择,如下所示:

    小工具示例

    小工具示例

    无论如何,您现在需要做的是决定您希望搜索栏出现的位置。

    假设您计划每天发布新的博客内容,并且知道存档将快速增长。因此,在每个博客页面上都有一个搜索栏将是有益的。

    滚动到小部件的底部并找到名为“搜索”的小工具:

    搜索小工具

    搜索小工具

    您可以通过单击它并选择将其添加到哪个部分来添加它,如下所示:

    使用下拉菜单添加搜索小工具

    使用下拉菜单添加搜索小工具

    或者您可以将小工具拖放到您希望它出现在的部分块中:

    通过拖放添加搜索小工具

    通过拖放添加搜索小工具

    一旦你把它放在你想要的地方,给它一个名字:

    为您的搜索小工具命名

    为您的搜索小工具命名

    保存您的更改,然后访问您的站点以确认它看起来像您希望的那样:

    搜索栏添加到博客

    搜索栏添加到博客

    您现在可以看到搜索栏位于博客侧边栏的顶部,可供您的读者使用。

    使用WordPress工具将搜索添加到您网站的主要内容

    虽然将搜索栏放在网站始终存在的元素中很有用,但您也可能会找到将其包含在页面实际内容中的理由。

    有几种方法可以实现这一点:

    使用WordPress编辑器

    Gutenberg编辑器无疑使设计更具创意的页面布局变得更加容易,而无需依赖HTML短代码

    借助WordPress编辑器,您现在可以添加到页面中的一个这样的元素是搜索小部件:

    在古腾堡搜索小工具区块

    在古腾堡搜索小工具区块

    使用此选项时,您可以更好地控制搜索栏的显示方式。例如,您可以更改搜索栏的标题、占位符文本以及按钮:

    使用古腾堡自定义搜​​索栏

    使用古腾堡自定义搜​​索栏

    您甚至可以使用自定义CSS类更改搜索区块的样式。

    使用页面构建器插件

    对于那些喜欢使用拖放式页面构建器插件(如Elementor)的人,您也可以使用您选择的插件访问搜索小工具。这个过程类似于你对古腾堡所做的。

    打开新页面或文章并激活Elementor编辑器后,从您的Elements列表中搜索WordPress搜索小工具:

    Elementor中的搜索小工具

    Elementor中的搜索小工具

    将搜索元素拖到您希望它出现在页面上的位置。例如,这是一个404页面,可帮助用户通过搜索栏回到正轨:

    带有搜索栏的404页面示例

    带有搜索栏的404页面示例

    如您所见,与Gutenberg相比,页面构建器插件让您可以更好地控制WordPress搜索栏的显示位置,允许您将其分层放置在其他内容之上。

    使用主题

    在某些情况下,您可能会发现一个主题和模板会自动向您的网站内容添加搜索。但是,执行此操作的主题类型往往是高度专业化的,例如住宅房地产主题

    住宅房地产主题演示

    住宅房地产主题演示

    由于在这些目录列表网站上搜索可能会变得复杂,因此主题开发人员将功能构建到模板中是有道理的。

    预订站点主题是另一个已经内置搜索功能的示例,就像这个来自Travel Booking主题的演示:

    旅行预订主题演示

    旅行预订主题演示

    可以想象,将搜索功能内置到您的 WordPress 主题和模板中将省去很多麻烦,而不必自己构建如此复杂的东西。如果主题针对性能进行了优化,那么它的搜索引擎解决方案也应该如此(再次,少担心一件事)。

    使用代码添加WordPress搜索

    还有另一种向您的网站添加基本搜索表单的方法,但它要求您熟悉编码。

    为此,请转到外观 > 主题编辑器:

    主题编辑器

    主题编辑器

    您在这里要做的是使用functions.php主题文件为搜索栏创建一个短代码:

    functions.php主题文件

    functions.php主题文件

    在文件底部,添加以下代码片段:

    add_shortcode( ‘shortcodename’, ‘get_search_form’);
    add_shortcode( ‘shortcodename’, ‘get_search_form’);
    add_shortcode( 'shortcodename', 'get_search_form');

    将“shortcodename”替换为您自己的搜索表单名称。确保全部为小写,没有空格、数字或符号。更新文件后,您就可以开始在您的网站上使用短代码。

    下面是一个例子:

    用于向您的网站添加搜索栏的自定义短代码

    用于向您的网站添加搜索栏的自定义短代码

    添加短代码的方式与将任何常规文本添加到站点的方式相同。请记住将其括在方括号 [] 中。

    虽然您将无法在编辑器中看到搜索栏,但请查看页面的预览,您会在网站的前端看到它:

    添加了短代码的搜索栏

  • wp_enqueue_scripts – 如何在WordPress中实现资源队列

    wp_enqueue_scripts – 如何在WordPress中实现资源队列-1
    在WordPress中,不是简单地将这些添加到标题中,您应该使用一种称为入队的方法,这是一种处理资产的标准化方式,具有管理依赖项的额外好处。在下面了解如何使用 wp_enqueue_scripts.

    排队的工作原理

    将脚本或样式排入队列时需要执行两个步骤。首先你注册它——告诉WordPress它在那里——然后你实际上将它排入队列,最终将它输出到标题中或在结束正文标签之前。

    有两个步骤的原因与模块化有关。有时您会想让WordPress知道某个资产,但您可能不想在每个页面上都使用它。例如:如果您正在构建一个使用Javascript的自定义图库简码,您实际上只需要在使用简码时加载JS – 可能不是在每个页面上。

    实现这一点的方法是首先注册脚本,只有在显示简码时才真正将其排入队列。

    使用wp_enqueue_scripts入队基础知识

    要在前端排队脚本和样式,您需要使用wp_enqueue_scripts钩子。在该挂钩的函数可以使用wp_register_script()wp_enqueue_script()wp_register_style()wp_enqueue_style()功能。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );

    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_register_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    
        wp_enqueue_style( 'custom-gallery' );
        wp_enqueue_script( 'custom-gallery' );
    }

    在上面的例子中,我在同一个函数中注册和排队资产,这有点多余。实际上,您可以使用入队函数立即注册和入队,方法是使用与注册函数中相同的参数:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    }

    如果我要将这两个函数分开,我会通过在不同的钩子中使用它们来实现。在一个真实的例子中,我们可以使用wp_enqueue_scripts钩子来注册资产和短代码的函数来将它们排入队列。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_shortcode( ‘custom_gallery’, ‘custom_gallery’ );
    function custom_gallery( $atts ){
    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    // Gallery code here
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );

    }

    add_shortcode( ‘custom_gallery’, ‘custom_gallery’ );

    function custom_gallery( $atts ){

    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );

    // Gallery code here
    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_register_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    
    }
    
    add_shortcode( 'custom_gallery', 'custom_gallery' );
    
    function custom_gallery( $atts ){
    
        wp_enqueue_style( 'custom-gallery' );
        wp_enqueue_script( 'custom-gallery' );
    
        // Gallery code here
    }

    依赖管理

    WordPress的排队机制内置了对依赖项管理的支持,使用两者wp_register_style()wp_register_script()函数的第三个参数。如果您不需要将它们分开,您也可以立即使用排队功能。

    第三个参数是需要在当前资产入队之前加载的已注册脚本/样式数组。我们上面的例子很可能依赖于jQuery,所以让我们现在指定:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ) );
    }

    我们不需要自己注册或排队jQuery,因为它已经是WordPress的一部分。您可以在Codex中找到WordPress中可用的脚本和样式列表。

    如果您有自己的依赖项,则需要注册它们,否则您的脚本将无法加载。下面是一个例子:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ) );
        wp_enqueue_script( 'custom-gallery-lightbox', plugins_url( '/js/gallery-lightbox.js' , __FILE__ ), array( 'custom-gallery' ) );
    }

    假设第一个脚本是画廊,第二个脚本是使图像在灯箱中打开的扩展。请注意,即使我们的第二个脚本依赖于jQuery,我们也不需要指定这一点,因为我们的第一个脚本已经加载了jQuery。也就是说,声明所有依赖项可能是个好主意,只是为了确保如果您忘记包含依赖项,不会有任何破坏。

    WordPress 现在知道我们需要哪些脚本,并且可以计算出需要将它们添加到页面的顺序。

    每当您可以在页脚中加载脚本时,您都应该这样做。这会增加明显的页面加载时间,并可以防止您的网站在加载脚本时挂起,尤其是当它们包含AJAX调用时。

    入队机制可以使用第五个参数(第四个是可选版本号)向页脚添加脚本。如果我们稍微修改一下,上面的示例将加载页脚中的脚本。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ), ‘1.0’, true );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’, ‘jquery’ ), ‘1.0’, true );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ), ‘1.0’, true );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’, ‘jquery’ ), ‘1.0’, true );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'custom-gallery-lightbox', plugins_url( '/js/gallery-lightbox.js' , __FILE__ ), array( 'custom-gallery', 'jquery' ), '1.0', true );
    }

    指定true作为第五个参数会将脚本放在页脚中,使用false或省略参数将在页眉中加载内容。正如我之前提到的,只要有可能,就在页脚中加载脚本。

    为样式指定媒体

    使用样式注册/入队功能的第五个参数,您可以控制已定义脚本的媒体类型(打印、屏幕、手持设备等)。通过使用此参数,您可以将样式的加载限制为特定的媒体类型,这是一个方便的小优化技巧。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery-print’, plugins_url( ‘/css/gallery.css’ , __FILE__ ), array(), ‘1.0’, ‘print’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery-print’, plugins_url( ‘/css/gallery.css’ , __FILE__ ), array(), ‘1.0’, ‘print’ );

    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery-print', plugins_url( '/css/gallery.css' , __FILE__ ), array(), '1.0', 'print' );
    
    }

    有关可以使用的媒体类型的完整列表,请查看CSS规范

    小结

    对资产进行排队是一种强大的处理方式。它为您和其他插件/主题制作者提供了对整个系统的更多控制,并使依赖管理脱离您的手。

    如果这还不够,这是添加资源的方式,如果您不使用此方法,许多主题市场和WordPress插件库本身将不会批准您的工作。

  • 如何在FileZilla中显示隐藏文件

    如何在FileZilla中显示隐藏文件
    FileZilla是一种流行的SFTP客户端,用于在您的服务器和计算机之间传输文件。

    有时,您可能需要传输以句点开头的“隐藏”或“不可见”文件或文件夹(例如.htaccess.maintenance)。如果您在使用FileZilla查找服务器上的隐藏文件时遇到问题,您可能需要配置应用程序以显示隐藏文件。

    在本文中,我们将向您展示如何做到这一点。

    在FileZilla中显示隐藏文件

    在连接到您的服务器之前,单击 FileZilla 菜单栏中的“服务器”选项卡,然后单击下拉菜单中的强制显示隐藏文件(Force showing hidden files)。选中此选项将强制FileZilla显示隐藏的文件和目录。

    配置FileZilla以显示隐藏文件

    配置FileZilla以显示隐藏文件

    接下来,通过SFTP连接到您的服务器

    您现在应该能够看到服务器上的隐藏文件。在下面的屏幕截图中,我们的~/public文件夹中有两个隐藏文件- .hiddenfile.htaccess.

    FileZilla中的隐藏文件

    FileZilla中的隐藏文件

    能够查看服务器上的隐藏文件对于排除WordPress故障非常重要。例如,如果您的站点卡在维护模式,您可以检查.maintenance站点根目录中是否有可以删除的文件。

    同样,对于使用Web服务器Apache的站点,了解如何启用隐藏文件还可以让您更改.htaccess文件而无需联系主机的支持团队。如您所见,配置FileZilla以显示隐藏文件是一个快速而简单的过程!

  • WordPress REST API入门基础知识点

    WordPress REST API入门基础知识点

    WordPress REST API正在改变WordPress。您可能没有注意到,因为其中很多都在幕后,但是REST API的含义对WordPress的未来产生了巨大的影响,无论是在代码库还是使用方面。

    如果您没有使用过WordPress REST API,您可能想知道它是什么。因此,让我们先看看REST API是什么。

    在本文中,我们讲解WordPress REST API的一些基础知识。我们将研究它的作用、工作原理以及它给平台带来的变化。最后,我们将讨论您可以用它做的一些事情。

    当REST API最终被添加到WordPress的核心时,漫长的旅程就结束了。许多人预计这一变化是该平台历史上WordPress向前迈出的最大一步。但是,如果您不熟悉REST API,您可能会对它所获得的所有关注感到困惑。

    简而言之,WordPress REST API的加入使WordPress变成了一个功能齐全的应用程序框架。这显着提高了它的“可扩展性”,或者说它可以通过新特性和功能进行扩展。此外,它还扩展了平台与其他站点和应用程序进行通信的潜力。

    1. 什么是WordPress REST API?
    2. 了解WordPress REST API
    3. 如何访问WordPress REST API
    4. WordPress REST API命令概述
    5. 何时不使用WordPress REST API
    6. 使用WordPress REST API的实际应用程序

    什么是WordPress REST API?

    在我们深入研究WordPress REST API之前,了解我们的术语很重要。这是一个我们需要使用大量首字母缩略词的主题,所以让我们先把它们弄清楚。

    什么是应用程序编程接口 (API)?

    首先,您需要知道什么是应用程序编程接口 (API)。用最简单的术语来说,API是一个系统使其他系统能够连接到其数据的一种方式。例如,当网站向页面添加Facebook的“Like”按钮时,它会通过连接到Facebook的API来实现这一点。这让网页可以使用API来接收数据(点赞按钮的代码)和发送数据(点赞请求)。

    应用程序编程接口或API被定义为:

    “客户端和服务器之间的接口或通信协议,旨在简化客户端软件的构建。”

    如果您不熟悉API,那可能没有多大帮助。更简单地说,API是一组允许一个系统与另一个系统交互(或“接口”)的代码。如果您曾经将Google地图添加到您的WordPress站点,那么您就使用了Google的Maps API,它允许您的WordPress站点与Google Maps交互。

    这些系统不需要完全分开。WordPress已经有多个API,用于插件、设置和短代码等。插件和主题开发人员可以使用这些来与WordPress核心进行交互并使事情发生(例如创建短代码和向WordPress管理员添加设置屏幕)。

    与REST API的不同之处在于它允许WordPress安装本身之外的系统与WordPress交互,这就是REST部分的用武之地。

    什么是具象状态转移 (REST)?

    那么,REST API究竟是什么?具象状态传输 (REST)是一种特定于Web服务的 API。它包含一组标准化的指令和规则,使所有“RESTful”服务更容易相互连接。

    简而言之,REST API使您能够向外部系统发出请求。这方面的一个例子是Twitter。您可以使用其API向特定用户请求一定数量的推文。然后API将根据您的请求返回推文,您可以使用HTML和CSS将其嵌入您的网站。

    这些请求是使用JavaScript Object Notation (JSON) 执行的。这是一种专为发送、接收和存储数据而设计的语言。我们将在本文后面介绍JSON,但我们建议您先花点时间熟悉一下这种语言。这将帮助您准备好使用WordPress REST API,并理解我们将要讨论的一些概念。

    WordPress REST API是一个接口,开发人员可以使用它从WordPress安装本身之外访问WordPress。您可以使用JavaScript访问它,这意味着它可用于创建交互式网站和应用程序。

    REST代表 Representational State Transfer,API 代表应用程序编程接口。让我们来看看每一个的含义。

    Representational State Transfer (REST) 提供了 Web 系统可以用来相互交互的标准。如果没有 REST,两个系统将无法相互理解,从而来回发送数据。

    要使应用程序成为RESTful,它必须符合五个原则:

    1. 统一界面。用于访问系统中资源的URL必须是统一的、一致的,并且可以通过常见的方法(例如GET)(稍后会介绍更多)进行访问。
    2. 客户端服务器。客户端应用程序和服务器应用程序必须是分开的,因此它们可以相互独立开发。如果服务器端技术(即 WordPress)发生变化,服务器端应用程序(例如一个应用程序)必须仍然能够通过相同的简单方法访问它。
    3. 无国籍。使用API发出新请求时,服务器不会更改状态。它不存储已发出的请求。
    4. 可缓存。所有资源都必须是可缓存的,以提高速度并符合Web标准。缓存可以在服务器端或客户端实现。
    5. 分层系统。RESTful系统允许您使用多个层来访问它,如果需要,将数据存储在中间服务器中。服务器无法判断最终客户端是否直接连接到它。

    所有这些约束都与网页和应用程序相关,并控制应用程序与API交互的方式。

    这对WordPress意味着什么?

    将REST和API放在一起意味着WordPress REST API是一组代码,旨在使其他系统能够与WordPress交互,并且它的构建方式可确保这些系统能够相互理解。

    这意味着第三方网站或移动应用程序,例如,可以访问您的WordPress数据库,从中获取数据并向其中添加数据。

    不过,这有许多含义和用途。

    了解WordPress REST API

    WordPress REST API

    WordPress REST API的功能与我们已经提到的例子大体相同。基本上,WordPress REST API使您可以从任何与JSON兼容的框架中访问WordPress的所有功能。

    与Twitter的API使您能够检索和发送推文的方式类似,WordPress REST API可用于管理来自外部平台的文章、用户、类别等。这使您能够以多种前所未有的方式使用WordPress。

    WordPress REST API的背景

    REST API早在2013年就宣布了,它以插件的形式开始,旨在通过4.1版将其合并到WordPress核心中。正如经常发生的那样,延迟会推迟发布,直到三年后随着WordPress 4.7的发布,它最终被实现到核心中。

    WordPress REST API于2016年12月作为4.7版核心的一部分发布,但在此之前它作为插件存在。

    对于许多人来说,这是一个漫长但值得的等待,他们将WordPress REST API视为平台向前迈出的重要一步。您可能想知道为什么这个添加如此重要,特别是因为很多用户可能没有注意到太大的区别。事实证明,出于多种原因,包含REST API是对WordPress的根本性更改。

    例如,通过实施REST API,WordPress从简单的创建网站的平台迈出了一步。相反,它现在已经成为一个成熟的应用程序框架。这意味着开发人员可以使用WordPress站点为移动设备和网络创建应用程序,或作为信息存储库。

    这种转变也使WordPress摆脱了对PHP的依赖。通过使WordPress与任何JSON-compatible语言兼容,REST API极大地扩展了开发人员的可能性,使他们能够将WordPress功能与几乎任何框架一起使用。

    它旨在支持一系列基于WordPress构建的应用程序,并将WordPress从内容管理系统转变为应用程序平台。

    它被WordPress.com广泛使用,其基于JavaScript的界面使用REST API与WordPress数据库进行交互。古腾堡编辑界面也使用它,该界面在2019年成为核心的一部分。

    REST API扩大了WordPress可用于的应用程序范围。虽然内容管理系统擅长运行复杂的网站,但应用程序平台也可用于支持基于Web的单页应用程序或SPA(如果您曾经使用过Google文档,那么您已经使用过其中之一)。

    在这些中,当用户执行操作时会刷新内容,而不是加载新页面。因为它使用JavaScript(一种客户端语言)而不是PHP(一种服务器端语言),所以它可以在用户的​​浏览器中进行操作,而无需不断地向服务器发送请求。

    对WordPress用户和开发人员的影响

    如果您是使用WordPress的用户和/或开发人员,那么REST API有很多含义。

    对于用户,这些包括:

    • 对界面的更改,包括古腾堡编辑器。
    • 对WordPress移动应用程序的更改和改进。
    • 随着时间的推移,自托管的WordPress管理屏幕看起来更像WordPress.com屏幕。

    对于开发者来说,还有更广泛的意义和可能性:

    • 能够使用REST API创建SPA,从WordPress中提取数据,但看起来与WordPress非常不同。
    • 将WordPress与其他前端技术和系统集成的能力。
    • 如果您是不编写PHP的前端开发人员,则可以使用WordPress进行开发。
    • 对于PHP开发人员来说,越来越需要扩展您的技能以包含JavaScript。
    • 特定更改,例如需要在页面和后期编辑屏幕中构建古腾堡区块而不是元框。

    随着时间的推移,WordPress REST API将意味着更多的WordPress核心将用JavaScript而不是PHP编写。如果您是WordPress开发人员,这意味着您需要学习JavaScript。

    REST API和JSON如何协同工作

    最后,REST API在可用于平台的接口方面提供了更高的灵活性。它使管理界面完全可选,因为您现在可以完全通过JSON命令与您的WordPress站点进行交互。让我们看看JSON和REST API如何结合起来使这成为可能。

    WordPress REST API是为了响应网站和应用程序开发方式的变化以及更广泛地开放WordPress的需要而开发的。

    到目前为止,您应该对WordPress REST API的理论方面有所了解,所以让我们看看该技术更实用的方面。官方手册介绍如何使用REST API,如下所示:

    “WordPress REST API为WordPress数据类型提供API端点,允许开发人员通过发送和接收JSON(JavaScript Object Notation)对象与站点进行远程交互。”

    我们需要关注的第一个词是“端点”。将端点视为可以使用JSON请求调用的一段数据或函数的最简单方法。默认情况下,WordPress提供了大量可供使用的标准端点,但开发人员也可以创建自定义端点

    要到达端点,您必须使用采用普通URL形式的“路由”。您现在甚至可以自己尝试一下。转到您自己的WordPress站点,并将/wp-json/wp/v2 添加到其URL的末尾。如果您的站点是http://example.com,您将输入http://example.com/wp-json/wp/v2

    当您加载此路由时,您将到达端点,在这种情况下,它以(凌乱的)JSON格式返回站点的所有内容和元数据。通过使用不同的路由,您可以访问不同的端点,以获取特定类型的信息并执行各种任务。

    您将在REST API中使用三个主要的JSON请求,所以现在让我们快速浏览一下它们。他们是:

    • GET-此类请求用于从API检索和列出数据。例如,您将使用GET请求返回您网站上的用户列表或编译特定时间范围内的博客文章。
    • POST-此请求用于向API发送数据。它使您能够将新信息推送到WordPress,例如添加新用户和帖子或更新现有数据。
    • DELET-顾名思义,这个请求是用来删除数据的。这使您能够删除文章、页面、用户等。

    有时可以将GET和POST与相同的端点一起使用以获得不同的结果。例如,让我们看看端点/me/settings/。如果您要在此端点上执行GET请求,您将收到当前用户设置的列表。但是,通过在同一端点上使用POST请求,您将能够改为更新设置。

    如何访问WordPress REST API

    您如何访问WordPress REST API?

    要访问WP-REST API,您需要通过命令行访问您的站点。对于WordPress,这称为WP-CLI。您不会通过管理屏幕或直接访问您网站上的代码来执行任何这些操作。

    让我们来看看你是如何开始的。

    通过WP-CLI 访问WP-REST

    WP-CLI是WordPress命令行界面。它允许您通过计算机上的命令行界面 (CLI) 访问和使用WordPress。

    要访问CLI,请在Mac或Linux中打开终端,或在Windows中打开命令提示符。

    WordPress REST API入门基础知识点-1
    Mac上的终端

    要访问远程站点,您需要SSH到您的服务器以通过WP-CLI访问它(无法通过SSH连接?了解如何修复SSH“连接被拒绝”错误)。

    要访问本地站点,您只需从命令行使用正确的目录结构。在实际站点上试用REST API之前,最好先在本地测试站点上试用REST API。

    您需要专门访问您网站的REST API,如下所示:

    http://yoursite.com/wp-json/wp/v2

    然后,您可以在此之后添加元素以访问某些类型的数据,我们稍后将更详细地介绍这些数据。这些元素称为端点。

    验证

    访问站点后,您可能需要进行身份验证。一些端点是公共的,不需要身份验证,而其他端点则需要。

    您不是在此处登录站点管理员:REST API的处理方式略有不同。

    为了能够通过WP-CLI对您的站点进行身份验证,您需要安装一个身份验证插件。对于开发安装,Basic Auth插件可以完成这项工作并且很容易使用。

    但是,对于实时站点,您应该使用更强大的身份验证形式,例如JWT身份验证插件,它使用JSON Web Token并且更安全。

    然后,您可以使用命令行访问数据并包括身份验证。

    下面的示例curl用于测试与WordPress的连接。它将输出一个草稿列表。

    curl -X GET --user username:password -i http://yoursite.com/wp-json/wp/v2/posts?status=draft

    草稿帖子不是公开信息,因此您需要进行身份验证才能访问它们。但是,如果您要查找公开数据,则不需要身份验证。因此,要检索已发布的文章列表,您可以使用:

    curl -X GET http://yoursite.com/wp-json/wp/v2/posts

    这将获取所有已发布的文章,因为这些帖子是公开的。

    WordPress REST API命令概述

    我们现在将把所有这些理论付诸实践,并向您展示一些非常基本的示例,说明您可以使用REST API做什么。这只是一种尝试,以帮助您习惯使用REST API来处理对WordPress的请求。有关更多示例,我们建议您查看官方参考库REST API资源

    以下技术将要求您使用命令行来处理JSON请求。这使您能够通过使用基于文本的界面和发送简单的命令与您的 WordPress 站点进行交互。如果您没有任何使用命令行的经验,我们建议您先花一些时间学习基础知识。您可能还想使用SSH来创建与您的站点的连接。

    最后,当您准备好时,让我们看一些有关如何使用WordPress REST API的示例!

    一旦您访问了您的站点并且您知道如何使用身份验证(以及您是否需要),您将需要使用一系列命令中的一个来与您的站点进行交互。

    您需要使用的命令是:

    • GET 检索资源,例如文章或其他一些数据。
    • POST 向服务器添加资源,例如文章、附件或其他资源。
    • PUT 可用于编辑或更新服务器上已有的资源。
    • DELETE从服务器中删除资源。小心使用!

    让我们依次来看看其中的每一个。

    Get

    GET命令可能是最常用的:它检索数据。下面的示例(您在成功访问您的网站后使用)将获取您网站中所有已发布页面的列表:

    GET http://yoursite.com/wp-json/wp/v2/posts/?status=published

    请注意,我没有在上面的行中包含您站点的完整路径,因为您已经使用WP-CLI访问了该路径。

    检索到该数据后,您可以使用它来通知您的下一步。您可以删除其中一个文章,对其进行编辑或更新。您可以简单地将帖子输出到您的网络应用程序。

    假设您想获取最新的文章。你会用这个:

    GET http://yoursite.com/wp-json/wp/v2/posts/?per_page=1

    在处理文章时,您可以使用许多参数。有关更多信息,请参阅WordPress REST API 手册

    Post

    POST用于向您的站点添加新数据或资源。

    因此,例如,如果您想创建一个文章,您可以使用以下POST命令开始:

    POST http://yoursite.com/wp-json/wp/v2/posts/

    这将创建一个新的空草稿文章。

    然后,您可以通过使用PUT命令进行编辑来更新文章。

    使用POST命令,您还可以添加文章以外的其他资源,包括附件和其他文章类型。

    要将页面添加到您的站点,您可以使用以下方法:

    POST http://yoursite.com/wp-json/wp/v2/posts/pages

    这会以与创建空文章相同的方式创建一个空页面。

    Put

    PUT命令允许您编辑现有资源,包括文章。

    假设您的网站上有许多草稿文章。您想检查它们并更新其中一个以使其发布。

    您可以首先获取所有草稿文章的列表:

    POST http://yoursite.com/wp-json/wp/v2/posts/?status="draft"

    系统将为您提供所有当前草稿文章的列表。您可以使用其ID更改其中之一的状态:

    PUT http://yoursite.com/wp-json/wp/v2/posts/567

    这将访问该文章并允许您对其进行编辑。然后,您可以使用status参数更改其状态:

    {
    "status" = "publish"
    }

    或者您可以向文章添加内容并发布它:

    {
    "status" = "publish"
    "content" = "content here"
    }

    服务器将返回一个200 - OK状态,告诉您PUT请求已成功编辑文章。

    DELETE

    DELETE命令执行您所期望的操作:它删除一个资源。默认情况下,如果您使用它来删除文章,它会将其放入垃圾箱,而不是永久删除。

    因此,如果您想将刚刚创建的文章移至垃圾箱,您可以使用以下命令:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567

    但是,如果您想绕过垃圾箱并永久删除它,您可以使用以下force参数:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567?force=true

    这将永久删除文章,无法撤消,因此应谨慎使用。

    一些例子

    1. 从站点返回文章

    虽然您显然需要适当的授权来编辑站点,但几乎可以从任何 WordPress 站点检索一些信息。这是因为REST API在所有WordPress安装中都是一致的。

    正如我们所讨论的,API存在的一个主要原因是使外部应用程序能够访问您的某些数据。在此示例中,我们可以从官方WordPress新闻博客中检索单个文章

    curl https://wordpress.org/news/wp-json/wp/v2/posts/1
    curl https://wordpress.org/news/wp-json/wp/v2/posts/1
    curl https://wordpress.org/news/wp-json/wp/v2/posts/1

    ID已设置为1,这意味着此请求将检索博客上的第一篇文章。可能很难看到,因为JSON不是很可读,但是在代码中,您可以找到文章的所有内容和元数据。

    JSON数据示例

    然后,您可以在应用程序中使用此信息,例如,使用您自己的自定义样式来显示它。

    如果您想返回博客中的每篇文章,您所要做的就是删除末尾的ID。但是,您更有可能希望返回选定数量的帖子。以下请求将返回最新的三个文章:

    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3
    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3
    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3

    您可以在其他网站甚至您自己的博客上亲自尝试。

    2. 更新文章

    现在,让我们尝试使用REST API对WordPress进行一些更改。为此,您需要登录到要管理的站点。例如,如果您使用SSH,则需要登录到您的服务器。

    在这个例子中,我们将更新一个现有的文章。首先,让我们使用一个请求来更新ID为1的文章的标题:

    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d ‘{“title”:”A Brand New Title”}’
    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d ‘{“title”:”A Brand New Title”}’
    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d '{"title":"A Brand New Title"}'

    这是不言自明的。title参数表明您正在更新文章的标题,后跟包含替换内容的文本字符串。

    还有很多其他的参数,你可以用它来进行更改后。例如,您可以使用列表为文章分配类别、发布文章或完全更改其内容。

    3. 删除用户

    最后,让我们看看如何使用REST API删除数据。在此示例中,我们将从站点中删除用户。当然,您需要先登录并授权管理用户,然后才能使用此功能。

    然后,您可以使用以下请求删除ID为101的用户:

    curl -X DELETE http://example.com/wp-json/wp/v2/users/101
    curl -X DELETE http://example.com/wp-json/wp/v2/users/101
    curl -X DELETE http://example.com/wp-json/wp/v2/users/101

    这将从站点中删除指定的用户。您可以使用附加参数根据用户的ID将用户的文章重新分配给另一个用户,或者强制永久删除而不是将用户添加到垃圾箱。

    通过这些示例,您可以开始了解REST API如何使您能够管理站点上的内容并连接到其他站点。如果您想了解更多信息,我们建议您深入研究REST API手册,并查看有关学习JSON的课程

    何时不使用WordPress REST API

    WordPress REST API并不总是开发网站或应用程序的正确方法。在使用它进行开发之前,您应该注意以下一些注意事项:

    兼容性

    如果您的应用程序将在不运行JavaScript的设备上或由可能关闭它的用户使用,那么如果您使用的是REST API,它就不会运行。

    用PHP编码的WordPress站点将输出HTML,因此不会遇到此问题。不使用JavaScript的设备越来越少,但如果您专门为这些设备开发,REST API将无法工作。

    同样,如果您的用户可能会关闭JavaScript,那么使用REST API会导致问题。出于可访问性或安全原因,某些用户会在其浏览器中关闭JavaScript。

    无障碍

    使用JavaScript开发的站点或应用程序并不总是像HTML输出那样易于访问。

    这主要是因为JavaScript用于传递动态内容的方式可能无法与屏幕阅读器很好地配合使用,并且可能会给视力障碍或光敏性癫痫患者带来问题。

    使用REST API访问您的WordPress站点并以可访问的形式输出数据意味着您可以克服这些问题,但在开发站点时检查站点的可访问性是值得的。

    搜索引擎优化

    频繁刷新的单页应用程序有时会导致SEO问题。这是因为第一次输出页面时未交付的内容可能不会被搜索引擎索引。

    谷歌和其他搜索引擎正在迎头赶上这样一个事实,即现在许多网站都由SPA驱动,并且正在适当地将它们编入索引。但是,对您使用REST API开发的任何站点进行彻底的SEO审核确实值得。

    如何禁用WordPress REST API

    如果您不希望应用程序能够使用REST API从您的站点访问数据,您可以禁用它。请记住,任何人都可以访问公共数据,而不仅仅是您。

    为此,您可以安装Disable WP REST API插件。这将为未登录到您的站点的任何人禁用REST API。

    禁用WP REST API插件

    禁用WP REST API插件

    或者,您可以向主题的函数文件中添加一些代码或编写自己的插件。最好编写一个插件,因为这不是特定于主题的功能。

    在您的插件中,只添加两行:

    add_filter( ‘json_enabled’, ‘__return_false’ );
    add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );
    add_filter( ‘json_enabled’, ‘__return_false’ );
    add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );
    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );
    

    这将完全禁用您站点的REST API。它可能会对您的管理屏幕产生连锁反应,因此请确保添加后一切正常。

    使用WordPress REST API的实际应用程序

    REST API为WordPress的未来提供了一些令人兴奋的可能性。以下是使用WordPress REST API创建SPA或将WordPress链接到其他站点和技术的应用程序和站点的一些示例。

    WordPress.com

    WordPress.com界面

    WordPress.com界面

    WordPress.com管理屏幕完全使用REST API构建,以提供用户与之交互以管理其站点的SPA。

    这使得界面和服务器之间的动态通信成为可能,并导致WordPress.org可能及时模仿的用户友好界面。

    区块编辑器(古腾堡)

    古腾堡编辑器

    古腾堡编辑器

    同样在WordPress管理屏幕中,但这次也在自托管WordPress中,Gutenberg区块编辑器使用REST API与您的数据库进行通信并创建块。

    要使文章类型与Gutenberg编辑器一起使用,它们必须启用REST API。这意味着,如果您要注册自定义文章类型并使用Gutenberg,则需要添加以下行以启用该文章类型的区块编辑器:

    “show_in_rest” = true;
    “show_in_rest” = true;
    "show_in_rest" = true;

    Event Espresso

    Event Espresso

    Event Espresso

    Event Espresso是一个WordPress插件,可让用户组织和宣传活动。它利用REST API,以便用户可以从WordPress外部访问其中的数据。这意味着您可以构建移动应用程序或SPA来管理您的活动。

    UsTwo

    UsTwo

    UsTwo

    UsTwo是一家数字机构,其网站是使用REST API作为单页应用程序构建的。这结合了使用React构建的前端和由WordPress提供支持的后端。

    他们的单个页面的内容是模块化的,其结构与标准的WordPress页面不同。为了完成这项工作,他们使用了一个自定义页面构建器插件,让他们的团队可以向站点添加模块化内容。

  • 如何开发一款WordPress子主题

    如何开发一款WordPress子主题

    您已经运行WordPress网站一段时间了,它一直在做您需要做的事情。但是现在,您决定需要对其进行自定义。

    或者,您可能正在使用从主题目录下载的主题或已购买的主题创建站点,但您意识到它不能完全按照您的需要运行。

    那你怎么办呢?

    您可以找到一个插件来提供您需要的自定义或切换到新主题。但是,如果您对当前的主题感到满意并且找不到可以添加您需要的功能的插件怎么办?

    答:您需要自定义您的主题。最佳实践说:您通过(WordPress)子主题来做到这一点。

    在本教程中,我们将更多地讨论子主题是什么以及它是如何工作的。我们还将带您完成从头开始创建主题的过程,并向您展示如何将修改后的主题变成子主题。

    修改现有主题是开始WordPress开发的好方法。更改的结果将很容易看到和理解。但是,直接对活动主题进行编辑可能会导致问题,因为即使是一个小错误也可能导致主题无法使用。每当主题更新时,您所做的所有更改也将丢失。

    然而,有一种方法可以避免这些问题,那就是创建“子主题”。子主题的工作方式与任何其他WordPress主题大致相同,不同之处在于它使用现有主题作为基础(或“父”)。您对子主题所做的更改将反映在您的站点上,而无需直接更改父主题。

    1. 自定义WordPress的方法
    2. 什么是WordPress子主题?
    3. 何时在WordPress中使用子主题(优点)
    4. 何时不使用WordPress子主题(缺点)
    5. 如何创建WordPress子主题
    6. 如何激活WordPress子主题
    7. 如何在WordPress中自定义您的子主题
    8. 如何对子主题和父主题进行故障排除
    9. 使用WordPress子主题时的有用提示

    自定义WordPress的方法

    自定义主题有风险。如果您在第三方主题(例如您从市场上购买的主题)中编辑代码,那么当您下次更新主题时,您所做的所有更改都将丢失。这意味着您的网站不仅会恢复原状,而且您的所有工作都被浪费了。

    可以通过三种方式自定义您的WordPress网站:

    • 直接编辑您的主题。
    • 安装插件。
    • 创建当前主题的子主题。

    让我们依次来看看其中的每一个。

    编辑您的主题

    如果您的网站运行自定义WordPress主题,这意味着它是专门为您的网站开发的,您可以选择安全地编辑它,因为下次更新主题时不会丢失您的自定义设置。

    相反,如果您或您的开发人员将来对主题进行更改,您将编辑的是主题的自定义版本,而不是更改之前的原始版本。

    这并不意味着编辑您的主题并非没有风险。如果您没有编写主题的经验,创建子主题可能仍然更安全(我们稍后会看到如何)。这是我做的事情:我有一个基本主题,我在我所有的网站上使用,具有标准布局、钩子和函数,然后我在每个网站上使用子主题对其进行自定义。

    如果您直接编辑主题,请确保保留原始主题的备份,不要在实时站点中编辑主题(改用开发或临时站点),并使用版本控制来跟踪您的更改。

    如果您使用的是第三方主题,则永远不要直接编辑它。相反,使用插件或创建子主题。

    添加插件

    自定义WordPress主题的第二个选项是安装或编写插件。

    如果您要进行的自定义是功能性的而不是与设计相关的,那么插件是一种更合适的方法。所以如果你想添加额外的代码,最好还是创建一个插件。

    插件不必很大或很复杂:如果您需要向主题中的functions.php文件添加额外的代码,请创建一个简单的插件来向您的站点添加几行代码。一个很好的例子是注册自定义文章类型

    将代码添加到主题的functions.php可能很诱人,但添加帖子类型是对网站的功能更改,而不是设计更改。如果您以后要切换主题,您不会希望丢失这些帖子类型以及您使用它们创建的所有帖子。这就是为什么您应该安装或创建插件的原因。

    有时您可以找到一个现有的插件来满足您的需求,但有时您可能需要自己编写插件代码。

    WordPress插件库

    WordPress插件库

    如果对是否应该创建插件或自定义主题(或子主题)有疑问,请问自己:如果我想在将来更改网站的设计并安装新的WordPress主题,我是否希望保留此更改? 如果答案是肯定的,这意味着更改是功能性的而不是美学的,它应该包含在插件中。

    创建子主题

    自定义WordPress主题的第三个选项是创建子主题

    以下是您使用子主题的一些场景:

    • 您希望更改网站的设计,而不是功能。
    • 您的网站正在运行第三方主题或您想在当前状态下再次使用的主题。
    • 您不想直接编辑现有主题,以防它引起问题(可能您不是经验丰富的主题开发人员)。
    • 您的站点正在运行一个设计为父主题的主题,例如框架主题。这些主题具有许多自定义选项,例如hooks,专为您添加到您自己的子主题而设计。

    因此,子主题是一种向您的网站添加自定义内容的有效且安全的方式。因此,让我们更深入地了解它们。

    什么是WordPress子主题?

    WordPress主题目录

    那么,WordPress中的子主题究竟是什么?它是如何工作的?

    子主题是与另一个主题协同工作的主题,称为父主题

    它包含一些特定的说明来告诉WordPress这是一个子主题以及父主题是什么。WordPress 然后在大多数情况下使用来自父主题的代码,但会使用来自子主题的代码(如有必要)覆盖它。

    在许多方面,子主题的功能就像一个“正常”的WordPress主题。它以相同的方式安装、启用和配置。子主题的独特之处在于它依赖于另一个主题来确定其大部分内容。另一个主题被称为“父主题”。

    WordPress将始终优先考虑子主题的设置。因此,你能想到的子主题为坐在前面的家长。如果子主题中的设置覆盖了父主题中的匹配设置,则子主题优先。这使您可以仅更改要更改的主题部分,其他所有内容都由现有父级处理。

    例如,大多数父主题包含定义不同标题文本级别的样式,例如h1、h2、h3、h4等。假设父主题将h1字体大小定义为20px,但子主题指定与32px相同的标题。在这种情况下,WordPress会将后一种样式应用于所有h1文本。但是,如果同一个子主题不包含h2、h3 和 h4 的特殊样式说明,则仍将应用父主题定义的样式。

    如果您可以直接编辑主题,您可能想知道为什么子主题值得麻烦。使用子主题实际上有很多优点,因为它:

    • 使您能够更新父主题。您应该始终保持网站的各个方面都是最新的。但是,如果您编辑了父主题,则更新后所有更改都将丢失。
    • 可以轻松找到您所做的更改。发现您进行更改的每个实例可能很困难。使用子主题使您的添加内容更加清晰。
    • 避免直接编辑父主题的风险。如果您在处理主题时出错,或者您对所做的修改不满意,您可以轻松回滚到原始主题。

    WordPress子主题中的文件

    每个WordPress子主题必须至少有两个文件:样式表和函数文件。样式表将在顶部包含注释掉的文本,告诉WordPress这是一个子主题以及父主题是什么。函数文件将包含一个函数,该函数将来自父主题的样式表排入队列

    注意:您可能会遇到一些指南,告诉您从子主题的样式表调用父主题样式表。这不再是正确的方法,您应该在函数文件中使用排队。我很快就会告诉你如何做到这一点。

    你的子主题并不必须 包含的任何其他文件。与父主题不同,如果主题中没有更多特定文件,它不需要index.php文件作为后备。这是因为如果子主题中不存在模板文件,WordPress将使用父主题中的文件。

    因此,根据您希望子主题执行的操作,您可以向样式表、函数文件中添加额外的代码,或者在子主题中创建额外的文件以覆盖父主题。这些可能包括以下一项或多项:

    • 模板文件覆盖父主题中的相同文件,例如page.php当您要自定义静态页面的显示时。
    • 当您想要自定义站点设计的这些部分时,模板部分例如header.php或footer.php。
    • 您从子主题中的模板文件调用的额外模板部分。因此,如果您想在显示静态页面时自定义页眉,您可以在子主题中创建一个名为header-page.php的文件和一个名为page.php的模板文件,该文件将覆盖父主题中的page.php . 这个模板文件将与父主题中的模板文件相同,除了头文件的调用,它会调用header-page.php 而不是header.php。
    • 用于功能的额外包含文件。如果您想添加大量函数代码并对其进行组织,您可以为每组函数创建包含文件,然后在您的子主题的functions.php文件中调用它们。因此,例如,如果您想添加额外的定制器选项,您可以在您的子主题中添加一个名为customr.php的包含文件,然后从您的子主题中的函数文件中调用该文件。

    但是,如果您确实添加了额外的文件和功能,WordPress怎么知道该使用哪个呢?来自父主题的那些还是来自子主题的那些?这就是我们接下来要讲的。

    WordPress如何选择模板文件

    WordPress在您的站点上显示内容时从您的主题中选择模板文件的方式是参考模板层次结构

    WordPress模板层次结构

    WordPress模板层次结构

    WordPress使用此层次结构来处理主题中的模板文件,并在显示给定类型的内容时找到要使用的正确模板文件。它将从顶部开始(在上图中的左侧)并依次查找给定内容类型的每个文件。当它找到将显示该内容的文件时,它将使用它。

    假设您的主题有一个archive.php文件和一个category.php文件,但没有tag.php文件。显示类别档案时,WordPress将使用category.php,因为它更特定于内容类型。当显示标签档案时,它将使用archive.php代替。

    如果WordPress没有为给定的内容类型找到模板文件,它会默认为包罗万象的index.php文件,这就是为什么每个独立主题(即不是子主题)都必须有一个index.php文件的原因.

    这同样适用于单个文章和页面。假设您的主题有一个single.php文件,它是任何文章类型(包括页面和自定义帖子类型)的单个帖子的统称。它还有一个page.php文件。当显示单个页面时,它将使用page.php。显示文章时,它将使用singular.php。如果您注册自定义文章类型并且不为该帖子类型添加模板文件,它将再次使用singular.php。

    当您使用子主题时,WordPress仍然使用模板层次结构来决定在您的站点上输出内容时使用哪个文件。它查看父主题和子主题中的文件并使用它遇到的第一个文件。

    所以想象你的子主题有singular.php和post.php,你的父主题有page.php和index.php。输出单个文章时,WordPress将使用子主题中的post.php。输出页面时,它将使用父主题中的page.php。当输出自定义帖子类型的单个帖子时,它将使用来自子主题的single.php。

    但是,如果您的子主题和父主题都有相同文件的实例怎么办?

    假设您将page.php文件添加到上一个示例中的子主题。因为该主题位于子主题中,所以它会覆盖父主题中的相同文件。因此,当显示单个页面时,WordPress将使用来自子主题的新page.php文件。

    这就是为什么创建子主题可以让您自定义父主题。如果您将父主题中的模板文件副本添加到子主题,然后对其进行编辑以包含您要进行的自定义,WordPress将使用这个新模板文件,而不是来自父主题的模板文件。这意味着您的自定义将在显示内容时使用,而无需您编辑父主题。好的!

    WordPress如何从父主题和子主题运行函数

    如果您不想对主题中的模板文件进行自定义,而是对功能进行自定义,该怎么办?

    你也可以这样做。首先,您需要让自己满意,这样做的正确方法是通过子主题而不是插件。一个示例可能是您想要编辑父主题中已有的函数,例如,在页脚中输出版权页的函数。

    然后将新函数添加到子主题中的函数文件,或添加到从函数文件调用的包含文件。

    为确保您的新函数覆盖父主题的功能,您需要了解如何覆盖函数。有三种方法可以做到这一点:

    • 通过在父主题中编写一个与可插入函数同名的新函数。
    • 通过将父主题中的函数从它所附加的钩子中解开,然后编写一个新函数来替换它。
    • 通过编写一个比原始函数具有更高优先级的新函数并通过相同的钩子调用它,这意味着它在原始函数之后被调用,因此可以覆盖或增加它。

    我们将在本文稍后介绍您如何执行所有这些操作。但首先,让我们看一下您何时会使用和不会使用子主题的场景。

    何时在WordPress中使用子主题(优点)

    您现在知道什么是子主题以及如何使用它们来覆盖父主题中的模板文件或函数。

    简要回顾一下,如果您在网站上运行主题并且想要执行以下一项或多项操作,则应使用子主题:

    • 编辑一个或多个模板文件。
    • 添加与显示而非功能相关的额外功能。
    • 覆盖父主题中的一个或多个函数。
    • 添加额外的模板文件。

    一些优点包括:

    • 易于扩展和定制:很明显,子主题扩展了其父主题的功能。您已经有一个父主题形式的现成模板,您需要做的就是为您的子主题创建一个单独的style.css文件,并根据您的需要添加自定义调整。
    • 轻松更新:随着 WordPress 的发展,主题和插件需要经常更新。如果您对主要主题进行自定义调整和更改,如果您更新主题,最终可能会丢失所有更改。因此,建议对子主题进行此类更改,这样即使您需要更新父主题,也不必担心丢失更改。

    当您不使用子主题时呢?

    何时不使用WordPress子主题(缺点)

    有时您不会使用子主题,而应该使用不同的方法来自定义您的网站。这些是:

    • 如果您的主题是您自己开发的(或其他人为您编写的)并且不需要在其他任何地方使用它。只需编辑主题,确保使用版本控制。
    • 如果您要进行的自定义具有功能性,例如添加自定义帖子类型,并且您希望在将来更改主题时保留它们。改用插件。

    一些缺点包括:

    • 选择理想的父主题:并非所有主题都可以作为好父主题!例如,某些WordPress主题可能不会定期更新,因此往往缺乏最新的功能。同样,并非所有WordPress主题都是在考虑子主题的情况下创建的,因此可能不适合父主题。您需要选择完美的父主题,以便正确扩展它并使其成为您子主题的基础。
    • 定制工作:子主题基本上寻求扩展和定制现有模板设计。因此,如果您已经围绕父主题创建了一个网站,则在移动到子主题时,您可能需要重新考虑自定义元素,例如菜单、主题选项、侧边栏、标题等。

    现在您知道何时(以及何时不)使用子主题,是时候开始工作并学习如何在WordPress中创建子主题了。

    现在您知道为什么应该使用子主题,现在是创建一个的时候了。这个过程有点复杂,但我们将引导您完成每一步。

    如何创建WordPress子主题

    在创建子主题之前,您需要做一些准备工作。首先,在执行任何其他操作之前创建站点备份非常重要。这样,您就可以处理您的主题,而不必担心破坏您的网站或丢失其任何内容。事实上,最好使用临时站点来编辑和测试您的主题,而不是您的实时站点。

    我们还建议您在开始之前熟悉CSS和PHP。虽然您不需要任何使用这些语言创建子主题的经验,但它肯定有助于编辑主题的过程。花时间了解这些关键语言的基础知识将使您有一个良好的开端。

    在WordPress中设置一个基本的子主题涉及创建两个文件:样式表函数文件

    Step 1:为您的子主题创建一个文件夹

    您需要的第一件事是为您的孩子主题生活的地方。但是,在此之前,您需要一种直接处理站点文件的方法。这通常意味着使用像FileZilla这样的SFTP解决方案来访问您的站点。

    FileZilla界面

    一旦你安装和设置FileZilla中,您可以使用登录你的虚拟主机提供的凭据。完成后,您将看到整个站点组织成一系列文件夹和文件。从这里,您需要导航到/wp-content/themes/,这是所有主题所在的位置。

    WordPress主题目录

    右键单击此文件夹内的任意位置,然后选择创建目录。此文件夹将保存您的子主题,因此我们建议您以其父主题命名。例如,一个二〇一七的子主题可能被称为twentyseventeen-child。

    WordPress子主题目录

    保存文件夹后,就可以开始向子主题添加内容了。

    Step 2:创建样式表

    层叠样式表 (CSS)是一种定义HTML内容外观的语言。主题的CSS文件控制您网站上的文本、图像、超链接和大多数其他内容的外观。当我们谈论更改主题的外观时,我们通常谈论的是编辑其CSS。

    这听起来可能很复杂,而且CSS确实为您提供了很多自定义选项。但是,现在您无需担心具体细节。您需要做的就是创建CSS文件本身。您将在刚刚创建的子主题文件夹中执行此操作。只需打开文件夹,右键单击其中的任意位置,然后选择创建新文件。

    主题CSS样式

    当您被要求命名文件时,将其命名为style.css,注意使用确切的大小写和拼写(因为WordPress否则将无法识别该文件)。

    创建子主题CSS样式文件

    该文件自然是空的,因此您需要为其提供一些内容。要开始编辑文件,请右键单击它并选择查看/编辑。这将在您的默认文本编辑程序中打开文件,例如TextEdit或记事本。

    空白CSS文件

    在创建文件之前,您需要创建一个文件夹来保存您的主题。这在WordPress安装的wp-content/themes文件中。

    在新主题的文件夹中,创建一个名为style.css的文件。添加以下内容:

    /*
    Theme Name: My Child Theme. Child for Twenty Nineteen.
    Theme URI: https://rachelmccollin.com
    Description: Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author: Rachel McCollin
    Textdomain: mccollin
    Author URI: https://rachelmccollin.com/
    Template: twentynineteen
    Version: 1.0
    License: GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    */
    /*
    Theme Name: My Child Theme. Child for Twenty Nineteen.
    Theme URI: https://rachelmccollin.com
    Description: Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author: Rachel McCollin
    Textdomain: mccollin
    Author URI: https://rachelmccollin.com/
    Template: twentynineteen
    Version: 1.0
    License: GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    */
    /*
    Theme Name:  My Child Theme. Child for Twenty Nineteen.
    Theme URI:  https://rachelmccollin.com
    Description:  Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author:  Rachel McCollin
    Textdomain:  mccollin
    Author URI:  https://rachelmccollin.com/
    Template:  twentynineteen
    Version:  1.0
    License:  GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html                 
    */

    这段文字被注释掉了。它不是在您的网站上运行任何东西或提供任何功能的代码。相反,它会告诉WordPress主题。每个主题中都需要这样的文本,否则WordPress无法将其识别为主题。

    让我们通过每一行来确定它们的作用:

    • Theme Name:主题的唯一名称。
    • Theme URI:用户可以在其中找到主题的代码或文档。
    • Description:帮助用户理解主题的描述性文字。
    • Author:你的名字
    • Textdomain:用于国际化。在任何国际化函数中使用文本域作为第二个参数。
    • Author URI:作者的网站。
    • Template:存储父主题的文件夹。使用文件夹名称而不是主题名称。没有这一行,您的主题将无法作为子主题使用。
    • Version:版本号
    • License:许可证,必须是GNU。[关联]
    • License URI:许可证信息的链接。

    子主题最重要的一行是Template: 行。没有这个,主题将不能作为子主题工作。只有子主题将包含此行。

    将此添加到您主题的样式表中,对其进行编辑以添加您自己的详细信息而不是我的。您需要编辑Template: 行以添加存储现有主题的文件夹,因为这将是您的父主题。

    现在保存文件。如果您现在查看站点中的主题详细信息屏幕,您会看到显示的所有内容:

    WordPress中没有截图的主题页面

    WordPress中没有截图的主题页面

    这看起来不太好,因为没有截屏。这是一张图像,可以让您了解主题的外观。除非您的主题看起来与父主题非常不同,否则只需将screenshot.png文件从您的父主题复制到您的子主题。

    带有屏幕截图的WordPress中的主题页面

    带有屏幕截图的WordPress中的主题页面

    Step 3:引用父主题

    到目前为止,您的主题已经有了一个主页和一些基本信息。现在,是时候给它一些功能了。您可以通过创建一个函数文件来做到这一点。除其他外,此文件决定了主题的独特功能。这是一个功能强大的工具,用途广泛,但现在,您只需要创建它。

    下一步是将函数文件添加到您的子主题。您需要它,以便您可以将来自父主题的样式表排入队列。没有它,您的网站将根本没有样式,看起来像这样:

    我们的主页没有CSS

    我们的主页没有CSS

    不好,我相信你会同意的!因此,让我们添加样式以使其看起来应该如此。

    在您的子主题文件夹中,添加一个名为functions.php的文件。打开它并添加以下代码:

    <?php
    /* enqueue script for parent theme stylesheeet */
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( ‘parent’, get_template_directory_uri().‘/style.css’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘childtheme_parent_styles’);
    <?php
    /* enqueue script for parent theme stylesheeet */
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( ‘parent’, get_template_directory_uri().’/style.css’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘childtheme_parent_styles’);
    <?php
    /* enqueue script for parent theme stylesheeet */        
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( 'parent', get_template_directory_uri().'/style.css' );                       
    }
    add_action( 'wp_enqueue_scripts', 'childtheme_parent_styles');

    它使用wp_enqueue_style()函数将来自父主题的样式表排入队列,get_template_directory_uri()函数定位该文件的存储位置。该函数位于我创建的一个名为wbolt_parent_styles()的函数中,与wp_enqueue_scripts钩子挂钩。

    您可能想知道为什么它使用名为wp_enqueue_scripts而不是的函数wp_enqueue_styles。这是因为wp_enqueue_scripts用于脚本和样式,并且没有像wp_enqueue_styles.

    随意编辑我的代码,将您自己的前缀添加到您的函数名称中。我使用“childtheme”作为前缀,以确保我的函数不会与来自父主题或任何插件的任何其他函数发生冲突。

    现在保存您的文件。

    Step 4:启用子主题

    您的子主题现在可以使用了,所以您需要做的就是启用它。最简单的方法是通过WordPress管理界面。只需登录,然后访问外观>主题。您应该已经在此处看到您的子主题:

    启用子主题

    此时,您只需要单击“启用”即可启用您的主题。当然,此时您可能不会注意到您的站点有任何差异。这是因为您实际上还没有添加任何自定义。子主题仍然是一张白纸,等着你把它变成特别的东西。

    正如我们之前提到的,您现在应该花一些时间来了解有关CSSPHP的更多信息。这将使您能够使用内置主题编辑器通过子主题向您的站点添加新样式和功能。如果你想扩展您的主题的功能,它也是一个聪明的想法,详细了解functions.php的文件。只需稍加努力,您就可以使用全新的子主题对 WordPress 网站进行任何您想要的更改!

    如何激活WordPress子主题

    一旦您的子主题准备就绪,您就需要激活它。如果您担心激活子主题会关闭父主题,请不要担心:WordPress会知道使用父主题中的文件,除非您向子主题添加新文件来覆盖它们。到目前为止,您还没有向子主题添加任何额外的文件或功能,因此您的站点的工作方式与激活父主题时完全相同。

    请记住:首先在您的开发或临时站点上执行此操作。在您测试之前,不要在您的实时站点上激活您的子主题。

    在WordPress管理中,转到外观 > 主题。您会发现您的子主题列在您网站上安装的主题中。

    将鼠标悬停在主题上,然后单击“激活” 按钮。这将激活您的子主题。现在,当您访问您的实时站点时,它看起来和以前一样:

    网站首页

    网站首页

    它看起来相同,因为您尚未添加任何自定义。但是你现在有一个工作子主题。做得好!

    如何在WordPress中自定义子主题

    现在您的WordPress网站有了一个可用的子主题,是时候添加您的自定义设置了。在这里,我将向您展示如何添加模板文件以覆盖父主题上的模板文件、如何为子主题添加样式以及如何添加新功能。

    让我们从模板文件开始。

    如何将模板文件添加到您的WordPress子主题

    我们已经了解了WordPress在您的网站上显示内容时如何选择要使用的模板文件。有两件事要记住:

    • WordPress将使用层次结构中最先出现的文件,无论是来自子主题还是父主题。
    • 如果父主题和子主题中都存在同名的模板文件(或模板部分,例如header.php),WordPress将使用子主题中的一个。

    要添加自定义,我发现首先从父主题制作相关文件的副本,将其添加到子主题,然后编辑它更容易。

    这适用于您的子主题中的文件是否与父主题中的命名文件相同,或者它是用于显示不同内容类型的新文件,还是层次结构中更高的文件。

    因此,如果我将新版本的page.php添加到我的子主题中,这将覆盖我父主题中的page.php,我会将page.php从我的父主题复制到我的子主题,然后对其进行编辑。确保复制文件:不要移动它,因为您不想对父主题进行任何更改。

    例如,如果我想要在我的子主题中使用自定义页面模板,我会将page.php复制到我的子主题,重命名它,然后对其进行编辑。

    这样,您可以确保不需要自定义的文件的所有方面仍然可以正常工作。这同样适用于模板部件。

    如何为您的WordPress子主题添加样式

    您还可以向子主题的style.css文件添加样式,这将增强或覆盖父主题样式表中的样式。

    WordPress将首先从父主题调用样式表,然后从子主题调用样式表。这意味着如果您将样式添加到与父主题中的样式相同的元素的子主题,只要您使用相同的选择器,它就会覆盖父主题的样式。

    因此,假设您想更改站点标题的颜色。在父主题中,这可能是这样的:

    h1.site-title {
    color: #000;
    }
    h1.site-title {
    color: #000;
    }
    h1.site-title {
    color: #000;
    }

    要在您的子主题中覆盖它,您可以添加以下内容:

    h1.site-title {
    color: #303030;
    }
    h1.site-title {
    color: #303030;
    }
    h1.site-title {
    color: #303030;
    }

    由于浏览器会在父主题中的样式之后遇到这个,它将覆盖它并被使用。

    如何为WordPress子主题添加函数

    因此,您在WordPress中创建了子主题并不是因为您想要编辑任何模板文件,而是因为您想要添加额外的功能或覆盖父主题中的一个或多个功能。

    在子主题中编写函数比添加模板文件要复杂一些,但这是可能的。

    如果您想添加一个不与父主题中的任何功能交互的新功能,您可以继续这样做。只需将该函数添加到子主题中的functions.php文件中,将其挂接到相关的操作或过滤器挂钩上,就可以了。

    但是,如果您计划覆盖或编辑父主题中的函数,则需要了解可用于执行此操作的方法。您可以通过三种方式覆盖子主题中的父主题功能:

    • 如果父主题中的主题是可插入的,您只需在子主题中编写另一个具有相同名称的函数,WordPress将运行该函数而不是父主题中的函数。
    • 如果你想完全停止父主题中的函数运行,你可以在你的子主题中编写一个函数,将它从它所附加的钩子中解开。
    • 如果您想扩充一个函数,您可以在您的子主题中添加另一个函数(具有不同的名称),并确保它在父主题中的函数之后运行。

    让我们仔细看看你是如何做到的。

    覆盖可插入函数

    可插拔函数由环绕在它周围的条件检查标识。这将检查是否有另一个同名的函数已经被触发。如果是这样,它不会运行该功能。

    WordPress将在来自父主题的函数之前触发来自您的子主题的函数。如果它在父主题中遇到一个可插拔函数,并且您已向子主题添加了一个同名的函数,则该可插拔函数将不会运行。

    一个示例是在WooCommerce站点的Storefront主题中输出版权页的函数。这是没有内容的函数:

    if ( ! function_exists( ‘storefront_credit’ ) ) {
    function storefront_credit() {
  • WordPress钩子详解:如何使用动作、过滤器和自定义钩子

    WordPress钩子详解:如何使用动作、过滤器和自定义钩子

    WordPress钩子(Hook)是WordPress开发人员的武器库中最重要的工具之一。它们是WordPress插件和主题开发的基础。您可以使用WordPress的许多内置钩子将自定义代码“连接到”WordPress核心,并执行修改某些内容。

    有两种类型的WordPress钩子:ActionsFilters。Hook非常普遍,甚至WordPress Core本身也广泛使用它们。WordPress还提供了一种让您定义自己的自定义钩子的方法,以便其他开发人员可以挂钩到您的代码中。

    了解动作、过滤器和自定义钩子的工作原理对于掌握WordPress开发至关重要。

    本文的前半部分介绍了WordPress钩子的基础知识,并解释了它们如何与多个示例一起工作。在后半部分,您将学习如何使用钩子来自定义WordPress,创建自己的自定义钩子,并使用它们来构建自己的可扩展插件。

    1. 什么是WordPress钩子?
    2. 钩子 vs 动作 vs 过滤器
    3. WordPress钩子如何工作?
    4. 在哪里注册钩子及其函数?
    5. 使用WordPress钩子
    6. WordPress钩子列表和资源
    7. 查找在WordPress页面上注册的钩子
    8. “所有”钩子
    9. WordPress钩子存储在哪里?
    10. 如何创建自定义WordPress钩子
    11. 从WordPress钩子中删除回调函数
    12. 更多WordPress钩子教程

    什么是WordPress钩子?

    一个WordPress的页面是由很多的功能和数据库查询组装。WordPress核心、插件和主题协同工作以输出页面元素,如文本、图像、脚本和样式。完全组装后,浏览器会将它们放在一起并呈现页面。

    WordPress钩子允许您在某些点“钩入”这个构建过程并运行您的自定义代码。钩子的主要功能是让你在不接触核心文件的情况下修改或添加功能到WordPress 。

    钩子将帮助您使用自己的代码扩展WordPress

    钩子将帮助您使用自己的代码扩展WordPress

    WordPress的插件API赋予WordPress钩子的功能。您可以通过在WordPress运行时在特定实例中调用某些称为Hook Functions的WordPress函数来使用钩子。

    使用钩子函数,您可以将自定义代码捆绑在回调函数中,并将其注册到任何钩子中。注册后,此回调将在钩子所在的任何地方运行,允许您增加或替换默认的WordPress功能。

    钩子在代码执行过程中的位置是一个重要的因素。您将在接下来的部分中详细了解其重要性。

    两种类型的WordPress钩子:动作和过滤器

    WordPress包括两种类型的钩子,称为ActionsFilters。动作允许您在WordPress运行时的某些预定义点执行某些操作,而过滤器允许您修改WordPress处理的任何数据并返回这些数据。

    动作Actions)在WordPress代码中定义为:

    do_action( ‘action_name’, [optional_arguments] );
    do_action( ‘action_name’, [optional_arguments] );
    do_action( 'action_name', [optional_arguments] );

    action_name字符串是动作的名称。您可以指定[optional_arguments]变量以将附加参数传递给回调函数。如果未指定此字段,则其默认值将为空。

    示例:do_action( 'wp_head' )每次WordPress处理站点标题时,都可以挂接该动作以运行自定义代码。此动作没有任何其他参数。

    过滤器(Filters)在WordPress代码中定义为:

    apply_filters( ‘filter_name’, ‘value_to_be_filtered’, [optional_arguments] );
    apply_filters( ‘filter_name’, ‘value_to_be_filtered’, [optional_arguments] );
    apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );

    filter_name字符串是过滤器的名称,value_to_be_filtered变量是被过滤和返回需求,和值[optional_arguments]变量可以通过附加参数,就像动作。

    例如:apply_filters( 'admin_footer_text' , string $text )过滤器可以是钩状来修改在管理页脚显示的文本。从WordPress 5.4开始,其默认值将 在管理区域页脚中显示该句子。Thank you for creating with WordPress.

    稍后您将通过WordPress核心中的许多示例学习如何动作和过滤器钩子。

    上钩后,您可以指导您的代码在您的网站上执行自定义某些内容。例如,您可以使用钩子在发布文章后自动发送电子邮件,或加载自定义样式表来更改站点的外观。

    WordPress挂钩可帮助您与网站互动或修改您的网站

    WordPress钩子可帮助您与网站互动或修改您的网站

    理解钩子的最简单方法是将您的WordPress网站想象成盖房子。

    钩子类似于使用起重机来回移动建筑物品。正在传输的项目是回调函数,其中包括您的自定义代码。这些项目(或功能)可以帮助您建造或改造房屋。

    在WordPress中挂钩“wp_head”操作的示例

    在WordPress中“wp_head”动作钩子的示例

    回调函数可以是常规PHP函数、默认WordPress函数或您定义的自定义函数。

    我们只能在连接到特定挂钩的特定载体上运输某些物品。因此,动作只能与动作函数挂钩同样,过滤器只能与过滤器函数挂钩。

    虽然更换起重机上的吊钩和托架很乏味,但WordPress通过包含超过2,200种默认钩子使其变得非常容易。

    WordPress 5.1有2200多个原生钩子(来源:Adam Brown)

    WordPress 5.1有2200多个原生钩子(来源:Adam Brown)

    您可以找到遍布WordPress核心的钩子,让您可以进入要钩子的确切位置并运行您的自定义代码。

    钩子 vs 动作 vs 过滤器

    根据WordPress插件手册

    钩子是一段代码交互/修改另一段代码的一种方式……钩子有两种类型:动作和过滤器。

    术语HookActionFilter的使用方式存在广泛的不一致。一些教程和指南将它们与与之相关的函数混合在一起。这种混淆存在的一个主要原因是钩子工作方式的复杂性。

    即使您仔细查看WordPress核心内部,您也会发现添加动作和过滤器之间没有太大区别。下面是为ADD_ACTION()函数的源代码wp-includes/plugin.php文件:

    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }
    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }
    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {      
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }

    add_action()函数只是调用该add_filter()函数并返回其值。为什么?因为它们从根本上以相同的方式工作,除了一个区别。

    apply_filters()函数返回一个可以更改现有数据类型的值,而该do_action() 函数不返回任何内容(PHP中的NULL值)。

    如果您仍然感到困惑,请不要担心!读完本文的前半部分后,一切就都清楚了。我们将坚持使用官方的WordPress Codex术语,因为它清晰、准确且通用。

    现在,让自己熟悉下面显示的钩子例程。

    钩子程序:钩子、钩子函数和回调函数

    钩子程序:钩子、钩子函数和回调函数

    让我们分解一下Actions和Hooks之间的区别。

    WordPress钩子
    动作 过滤器
    动作用于在WordPress Core执行期间的特定点运行自定义函数。 过滤器用于修改或自定义其他功能使用的数据。
    动作由do_action( ‘action_name’ )WordPress代码中的函数定义/创建。 过滤器由apply_filters( ‘filter_name’, ‘value_to_be_filtered’ )WordPress代码中的函数定义/创建。
    动作也称为动作钩子 过滤器也称为过滤器钩子
    动作只能与动作函数挂钩。例如add_action()remove_action() 过滤器只能与过滤器函数挂钩。例如add_filter()remove_filter()
    动作函数不需要向它们的回调函数传递任何参数。 过滤器函数需要至少传递一个参数给它们的回调函数。
    动作函数可以执行任何类型的任务,包括改变WordPress工作方式的行为。 过滤器函数仅用于修改过滤器传递给它们的数据。
    动作函数应该return没什么。但是,它们可以echo输出或与数据库交互。 过滤器函数必须将return其更改作为输出。即使过滤器函数什么都不改变,它仍然必须return是未修改的输入。
    只要代码有效,动作几乎可以执行任何操作。 过滤器应该以孤立的方式工作,因此它们不会产生任何意外的副作用。
    总结:一个动作会中断常规的代码执行过程,用它接收到的信息做一些事情,但什么都不返回,然后退出。 总结:过滤器修改它接收到的信息,将其返回给调用钩子函数,其他函数可以使用它返回的值。

     

    有时,您可以使用动作或过滤器来实现相同的目标。例如,如果您想修改文章中的文本,您可以使用publish_post动作注册一个回调函数,并在将文章内容保存到数据库时更改文章内容。

    // define the callback function to change the text
    function change_text_callback() {
    // add the code to change text here
    }
    // hook in to the ‘publish_post’ action with the add_action() function
    add_action( ‘publish_post’, ‘change_text_callback’ );
    // define the callback function to change the text
    function change_text_callback() {
    // add the code to change text here
    }
    // hook in to the ‘publish_post’ action with the add_action() function
    add_action( ‘publish_post’, ‘change_text_callback’ );
    // define the callback function to change the text
    function change_text_callback() { 
    // add the code to change text here
    }
    // hook in to the 'publish_post' action with the add_action() function
    add_action( 'publish_post', 'change_text_callback' );

    或者您可以使用the_content过滤器注册另一个回调函数,以在浏览器中显示之前修改文章内容。

    // define the callback function to modify the text
    function change_text_another_callback( $content ) {
    // add the code to change text here and then return it
    return $filtered_content;
    }
    // hook in to ‘the_content’ filter with the add_filter() function
    add_filter( ‘the_content’, ‘change_text_another_callback’);
    // define the callback function to modify the text
    function change_text_another_callback( $content ) {
    // add the code to change text here and then return it
    return $filtered_content;
    }
    // hook in to ‘the_content’ filter with the add_filter() function
    add_filter( ‘the_content’, ‘change_text_another_callback’);
    // define the callback function to modify the text
    function change_text_another_callback( $content ) { 
    // add the code to change text here and then return it 
    return $filtered_content;
    }
    // hook in to 'the_content' filter with the add_filter() function
    add_filter( 'the_content', 'change_text_another_callback');

    两种不同的方法,结果相同。知道何时使用一个而不是另一个是成为优秀WordPress开发人员的关键。

    WordPress钩子如何工作?

    房子的例子很简单,可以理解钩子的基本功能,但它没有捕捉到它们如何工作的复杂性。最重要的是钩位置和特异性的概念。

    一个更好的例子是将处理WordPress网页想象成组装汽车。与制造汽车需要时间不同,组装网页几乎是瞬间完成的。

    组装网页就像组装汽车

    组装网页就像组装汽车

    就像汽车如何在现代装配线中逐个组装在一起一样,WordPress网页由服务器和客户端逐个组装。

    WordPress核心就像汽车引擎、底盘和其他必需品,为网站的“核心”功能提供动力。

    您可以仅使用WordPress核心就拥有一个功能强大的网站,但这有什么乐趣呢?您需要向站点添加令人兴奋的功能。这就是WordPress插件和主题介入的地方,它们都广泛使用钩子。

    在上面的示例中,每个编号的站点就像WordPress核心中的一个钩子。有两种类型的站点,例如动作和过滤器。每个站都包含一个特定类型的插槽,它只接受某些工具,类似于动作函数和过滤器函数。

    为了模块化和效率,所有站点都以频繁的间隔放置。

    根据特定位置的要求,我们可以为该特定站点的工作安装(或钩子)最合适的工具。这些工具就像用于与WordPress交互或修改WordPress的回调函数。

    一些工具可以显着改变汽车的工作,就像注册到动作的回调一样。其他工具仅用于自定义汽车的外观,例如注册到过滤器的回调。

    在正确的站点使用正确的工具对于制造一流的汽车至关重要。同样,钩子帮助我们根据我们的独特需求定制WordPress。

    如果你扩展这个类比,插件就像添加有用的汽车功能,如安全气囊、娱乐控制台、远程无钥匙系统等(像这些是为了增强WooCommerce的功能)。主题类似于自定义汽车的视觉部分,例如整体设计、喷漆、轮辋等(这是自定义WordPress主题的方法)。

    在哪里注册钩子及其函数?

    在WordPress中添加钩子有两种推荐的方法:

    • 插件:制作您自己的插件并在其中添加所有自定义代码。
    • 子主题:在子主题的functions.php文件中注册钩子和回调函数。

    对于本教程,让我们从创建插件开始。为此,请在您的/wp-content/plugins/目录中创建一个新文件夹。

    我给我的插件命名salhooks,但你可以随意命名它。根据 WordPress 指南,您需要在插件目录中创建一个具有相同名称 (salhooks.php )的PHP文件。

    将以下标题字段添加到您的插件文件以将其注册到WordPress。您可以在WordPress Codex中了解有关插件标头要求的更多信息。

    <?php
    /*
    Plugin Name: Salhooks
    Version : 1.0
    Description: Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author : Salman Ravoof
    Author URI : https://www.salmanravoof.com/
    License : GPLv2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined(‘ABSPATH’) ) {
    die;
    }
    <?php
    /*
    Plugin Name: Salhooks
    Version : 1.0
    Description: Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author : Salman Ravoof
    Author URI : https://www.salmanravoof.com/
    License : GPLv2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined(‘ABSPATH’) ) {
    die;
    }
    <?php
    /*
    Plugin Name:  Salhooks
    Version    :  1.0
    Description:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author     :  Salman Ravoof
    Author URI :  https://www.salmanravoof.com/
    License    :  GPLv2 or later
    License URI:  https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain:  salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined('ABSPATH') ) { 
    die;
    }

    保存此文件,然后在您的WordPress仪表盘中激活该插件。我将在本地WordPress安装中使用这个插件来演示钩子是如何工作的。

    作为旁注,您还可以直接编辑WordPress核心文件以注册钩子。但是,不建议这样做,因为每次更新WordPress时,您的所有自定义代码都会被覆盖。出于同样的原因,您不应该在父主题中添加钩子。

    使用WordPress钩子

    一个WordPress钩子本身什么都不做。它只是坐在代码中,等待一些钩子函数来激活它。要使用钩子,您至少需要调用2个其他函数。

    首先,您需要使用钩子函数注册钩子并在其中引用回调函数。然后你需要定义你之前在钩子函数中提到的回调函数。每次触发钩子时,WordPress都会运行此回调函数。

    定义这些函数的顺序无关紧要,但最好将它们放在一起。

    动作和过滤器具有不同的钩子函数。从现在开始,让我们将它们称为Action FunctionsFilter Functions。正如您将看到的,它们有自己的语法和参数要求。

    1. 钩住一个动作
    2. 钩住过滤器
    3. 使用Hooks自定义WordPress登录页面

    钩住一个动作

    动作提供了一种在WordPress 核心、插件或主题执行中的特定点运行自定义代码的方法。

    add_action() 动作函数

    您可以按照以下步骤使用动作注册回调函数:

    1. 定义一个带有自定义代码的回调函数。当WordPress的代码执行期间触发它注册到的任何动作时,此回调函数将运行。
    2. 使用该add_action()函数将您的回调函数连接到您想要的动作。根据WordPress Codex,add_action()函数至少需要传递两个参数:
        • 要挂钩的动作的名称。
        • 触发动作时将运行的回调函数的名称。
    3. add_action()函数还接受两个可选参数来设置prioritynumber of arguments。我们稍后会讨论它们。

    最好将回调函数参数命名为尽可能接近钩子函数传递的参数。

    让我们看一个使用该add_action()函数的例子。

    // define the callback function, the arguments are optional
    function example_callback(
  • WordPress调试完整指南(启用WP_DEBUG + 其他工具)

    WordPress调试完整指南(启用WP_DEBUG + 其他工具)

    在一个完美的世界中,您永远不会遇到需要调试的问题。但在现实世界中,您几乎肯定会在WordPress网站上遇到需要深入了解的问题。

    为了帮助您做到这一点,WordPress包含其自己的内置调试模式,您还可以找到有用的第三方工具来帮助您调试WordPress。

    在这篇文章中,我们将深入研究内置的WordPress调试模式并向您展示如何启用它。然后,我们还将分享其他一些调试WordPress网站的方法。

    这是我们将涵盖的所有内容:

    WP Debug有什么作用?

    核心WordPress软件是用PHP编写的,插件和主题也是如此。

    如果您的网站出现问题,WordPress Debug模式可以通过显示所有PHP错误、通知和警告来帮助您找出问题所在。

    启用Debug模式后,只要出现问题(即使它不会立即引起问题),您就会看到如下消息:

    WordPress网站上的WP_DEBUG错误示例

    WordPress网站上的WP_DEBUG错误示例

    然后,您可以修复问题或将其报告给您的开发人员或主题/插件的开发人员。

    什么是WordPress调试日志?

    当你本身启用WordPress的调试模式,你会看到的消息像上面网站上的例子在那一刻-但这些消息不会被保存任何地方。

    如果您想保存它们,您还可以启用WordPress调试日志以将所有这些消息和错误保存到您服务器上的文件中。

    通过将WP_DEBUG_LOG常量设置为true启用后,WordPress会将所有问题写入以下文件:

    wp-content/debug.log

    但是,您也可以指定自定义文件路径以将日志写入服务器上的其他位置。

    如果您想将问题保存到日志中但不想在页面的HTML中公开显示它们(如上面的示例屏幕截图),您还可以使用WP_DEBUG_DISPLAY常量来保持启用调试模式但不在您的站点上显示消息。

    通常,您需要WP_DEBUG_DISPLAYWP_DEBUG_LOG.

    如何启用WordPress Debug模式

    要启用WordPress调试模式,您有多种选择。我们将介绍三种启用它的方法:

    1. 如何使用WordPress调试插件
    2. 如何手动启用WordPress调试模式

    如何使用WordPress调试插件

    您可以使用免费的WordPress调试插件,启用调试模式。WordPress.org上有几个选项,但我们推荐Andy Fragen提供的免费WP Debugging插件

    WP Debugging插件

    WP Debugging插件

    安装并激活插件后,它会立即开始工作。默认情况下,它将以下常量设置为true(即启用以下功能):

    • WP_DEBUG – 启用调试模式。
    • WP_DEBUG_LOG – 将消息保存到日志文件。
    • SCRIPT_DEBUG
    • SAVEQUERIES

    我们将在本文稍后介绍最后两个常量的作用。

    要配置一些选项,您可以转到工具 → WP Debugging:

    WP Debugging插件设置

    WP Debugging插件设置

    完成后,请确保禁用插件以禁用调试模式。

    如何手动启用WordPress调试模式

    最后,您还可以通过手动将常量添加到wp-config.php文件来启用WordPress调试模式。

    首先,通过FTP连接到您的服务器并编辑wp-config.php文件。默认情况下,此文件位于您站点的根文件夹中(除非您出于安全原因移动了它)。

    要启用只是基本的WordPress的调试模式,添加下面的代码片段上面写着/* That’s all, stop editing! Happy blogging. */:

    // Enable WP_DEBUG modedefine( ‘WP_DEBUG’, true );
    // Enable WP_DEBUG modedefine( ‘WP_DEBUG’, true );
    // Enable WP_DEBUG modedefine( 'WP_DEBUG', true );

    您还可以根据自己的喜好使用以下一些常量:

    // Enable Debug logging to the /wp-content/debug.log filedefine( ‘WP_DEBUG_LOG’, true );// Disable display of errors and warningsdefine( ‘WP_DEBUG_DISPLAY’, false );@ini_set( ‘display_errors’, 0 );
    // Enable Debug logging to the /wp-content/debug.log filedefine( ‘WP_DEBUG_LOG’, true );// Disable display of errors and warningsdefine( ‘WP_DEBUG_DISPLAY’, false );@ini_set( ‘display_errors’, 0 );
    // Enable Debug logging to the /wp-content/debug.log filedefine( 'WP_DEBUG_LOG', true );// Disable display of errors and warningsdefine( 'WP_DEBUG_DISPLAY', false );@ini_set( 'display_errors', 0 );

    完成后,您可以将常量设置为false或仅删除代码段以禁用调试模式。

    确保在完成后禁用WordPress中的调试模式

    调试模式在您尝试解决WordPress问题时很有用,但您不应该让它24/7全天候启用,因为它可以将您的PHP代码中的文本显示给网站访问者。

    我们在上面提到了这一点 – 但这只是提醒您在完成故障排除后始终禁用调试模式。

    其他调试WordPress的方法

    除了我们上面介绍的内置调试工具之外,还有其他几个内置和第三方工具可以帮助您调试WordPress网站。

    脚本调试

    SCRIPT_DEBUG是另一个内置常量,它强制WordPress使用核心CSS和JavaScript文件的开发版本,而不是它通常加载的缩小版本。

    如果您正在测试对内置 .js 或.css文件的更改,这会很有帮助。

    要启用SCRIPT_DEBUG,您可以:

    • 使用上面的免费WP Debugging插件,默认情况下启用它。
    • 将以下常量添加到您的wp-config.php文件中 –define( 'SCRIPT_DEBUG', true );

    数据库查询调试

    如果您的站点的数据库有问题,您可以使用SAVEQUERIES常量来启用数据库查询日志记录:

    • 每个数据库查询。
    • 调用数据库查询的函数。
    • 查询用了多长时间。

    要启用查询日志记录,您可以:

    • 使用上面的免费WP Debugging插件,默认情况下启用它。
    • 将以下常量添加到您的wp-config.php文件中 –define( 'SAVEQUERIES', true );

    注意:这会影响您网站的性能,因此请尽可能在临时网站上使用它,并在完成后立即将其禁用。

    Query Monitor插件

    Query Monitor插件是一个免费的插件,这对在WordPress包括调试许多不同的领域有所帮助:

    总的来说,它是您能找到的最好的WordPress调试工具之一,这就是为什么它在320多条评论中几乎获得了完美的5星评级。

    安装并激活插件后,您将在WordPress工具栏上获得一些显示调试信息的新选项。单击后,这些选项将打开一个新的Query Monitor框,为您提供更多信息:

    Query Monitor插件

    Query Monitor插件

    为了更详细地了解,我们有一整篇关于如何使用Query Monitor插件的文章

    New Relic

    New Relic是用于分析和调试站点性能的高级工具。它可以帮助您发现影响站点性能的瓶颈和问题。

    服务器日志

    最后,您的服务器日志也可以成为调试WordPress的有用工具。

    如果您在使用宝塔面板,也可以轻松查询服务器日志,参考宝塔面板日志查阅教程

    小结

    如果您需要调试WordPress,内置的WordPress调试模式提供了一种查看PHP错误和通知的有用方法。

    您可以使用插件或通过将代码片段添加到您网站的wp-config.php文件来启用它。

    如需更多帮助,您还可以使用其他内置工具或第三方工具,例如New Relic和免费的Query Monitor插件。

  • WP-CLI v2 – 通过终端管理WordPress

    WP-CLI v2 – 通过终端管理WordPress

    在其生命的大部分时间里,WordPress都是使用简单的代码库构建的,其中少量面向对象的 PHP 是最抽象的系统。然而,在过去的几年里,这种情况正在好转。从单元测试到CSS预处理和命令行工具,越来越多对开发人员友好的资产不断涌现。在本文中,我们将介绍我的最爱之一:WP-CLI

    什么是WP-CLI?

    WP-CLI是一个命令行工具,供开发人员管理 WordPress 安装的常见任务(并不常见)。它可以添加/删除用户、文章、类别、插入测试数据、在数据库中搜索和替换、重置密码、帮助解决性能问题等等!

    WP-CLI作为一个开源项目已有十多年的历史, 自2003年以来主要由Daniel Bachhuber维护 。WP-CLI 的主要目标是帮助加快WordPress开发人员的工作流程

    多年来,该项目已经出现了更多!它现在甚至成为其他开源项目(例如Trellis和Bedrock )的要求。截至2017年1月,WP-CLI正式迁移到WordPress.org,现在也由Alain Schlesser共同维护

    WP-CLI v2于2018年8月8日发布,因此我们还将探索一些变化和新功能。

    获取WP-CLI

    WP-CLI v2.0.0的最低PHP要求已提高到PHP 5.4。虽然这是一个很好的进步,但我们建议您至少运行受支持的PHP版本,即5.6或更高版本。

    要开始使用,您需要安装WP-CLI——一个非常简单的过程。Linux和OSX的步骤如下,依次发出这三个命令:

    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp
    

    如果出现问题或者您使用的是Windows,请参阅基本说明其他安装方法

    完成后,您应该能够发出wp --info命令并获得有意义的响应。

    如果你想在你的服务器上安装WP-CLI,这个过程是一样的。不确定您当前运行的是哪个版本?您可以随时发出wp cli version命令来查找。

    WP-CLI的基础知识

    从命令行访问WordPress本身就很强大,但在使用bash脚本时可以为您提供更多控制和速度提升。

    Bash脚本允许您使用单个命令运行一系列命令。您可以键入bash install-and-setup.sh并获得以下结果:

    • 下载WordPress
    • 创建和填充 wp-config.php
    • 创建数据库
    • 安装WordPress
    • 安装并激活您需要的任何插件
    • 安装并激活主题
    • 下载并添加测试内容

    这些将是我为项目创建新测试环境所采取的步骤。通常至少需要5-10分钟,特别是如果涉及到一些插件。发出单个命令显然要快得多。

    一般WP-CLI命令

    如果您习惯于在终端中工作,那么WP-CLI对您来说没有什么特别之处。命令总是以开头,wp后跟命令和子命令,后跟必需和可选参数,如下所示:

    wp command subcommand requiredparam –optionalparam –optionalparam2=value
    wp command subcommand requiredparam –optionalparam –optionalparam2=value
    wp command subcommand requiredparam --optionalparam --optionalparam2=value

    让我们安装一个主题,看看它是如何与真实命令配合使用的:

    wp theme install twentyseventeen –activate
    wp theme install twentyseventeen –activate
    wp theme install twentyseventeen --activate

    这将在您的 WordPress 安装中安装并激活二〇一七主题。

    请注意,WP-CLI将与您当前在终端中的WordPress安装一起使用。如果您切换目录以转到另一个WordPress安装,它将适用于该安装。

    有用的例子

    简而言之,这就是WP-CLI!虽然您可以执行一些高级操作(我们稍后会介绍),但您已经掌握了足够的知识,可以开始并执行所需的任何操作。我建议查看命令列表,尝试其中的一些。我们将在这里看一些有用的东西,然后继续通过SSH使用WP-CLI和使用bash脚本。

    安装WordPress

    我经常使用WP-CLI来设置测试环境,第一步是vanilla安装。这是我运行的命令列表:

    wp core download
    wp core config –dbname=mydbname –dbuser=mydbuser –dbpass=mydbpass –dbhost=localhost –dbprefix=whebfubwef_ –extra-php <<PHP
    define( ‘WP_DEBUG’, true );
    define( ‘WP_DEBUG_LOG’, true );
    PHP
    wp db create
    wp core install –url=http://siteurl.com –title=SiteTitle –admin_user=username –admin_password=mypassword –admin_email=my@email.com
    wp core download
    wp core config –dbname=mydbname –dbuser=mydbuser –dbpass=mydbpass –dbhost=localhost –dbprefix=whebfubwef_ –extra-php <<PHP
    define( ‘WP_DEBUG’, true );
    define( ‘WP_DEBUG_LOG’, true );
    PHP
    wp db create
    wp core install –url=http://siteurl.com –title=SiteTitle –admin_user=username –admin_password=mypassword –admin_email=my@email.com
    wp core download
    wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    PHP
    wp db create
    wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword --admin_email=my@email.com
    

    注意这有多酷!使用第一个命令下载最新版本的WordPress。第二个命令使用数据库访问权限和一些附加的PHP设置配置文件。额外的常量确保我们有我们的调试选项进行测试。如果您想了解有关调试WordPress的更多信息,我们在此处提供了详细指南。

    第三个命令创建数据库(WP-CLI使用配置文件中的数据库访问信息),最后,我们使用几个参数安装WordPress。

    重新安装WordPress核心

    您还可以使用WP-CLI重新安装WordPress核心。以下命令将下载没有默认主题和插件的WordPress核心。

    wp core download –skip-content –force
    wp core download –skip-content –force
    wp core download --skip-content --force

    更改WordPress网址

    您可能需要或想要更改WordPress URL的原因有很多。也许您正在更改域、移动到子域、从www更新到非www、移动文件,甚至从 HTTP 迁移到 HTTPS。无论情况如何,您都可以轻松使用该wp option update命令。下面是一个例子:

    wp option update home ‘http://example.com’
    wp option update siteurl ‘http://example.com’
    wp option update home ‘http://example.com’
    wp option update siteurl ‘http://example.com’
    wp option update home 'http://example.com'
    wp option update siteurl 'http://example.com'

    包含详细信息的当前插件列表

    要获取站点上安装的当前插件列表,只需使用以下命令。在此示例中,您可以看到我们安装了Schema和Yoast SEO插件。它还将返回状态(活动/停用)、是否有可用更新以及当前版本。

    wp plugin list
    wp plugin list
    wp plugin list

    WP-CLI插件列表

    WP-CLI插件列表

    安装多个插件

    要安装多个插件,您可以简单地堆积参数。这是一个下载并激活3个插件的示例:

    wp plugin install advanced-custom-fields jetpack ninja-forms –activate
    wp plugin install advanced-custom-fields jetpack ninja-forms –activate
    wp plugin install advanced-custom-fields jetpack ninja-forms --activate

    请注意,插件名称来自它们在存储库中的名称。解决这个问题的最简单方法是访问他们的页面并查看URL或使用wp plugin search searchterm,它将在终端中为您提供列表。

    WordPress插件库URL

    WordPress插件库URL

    如果需要,您还可以使用--version属性安装旧版本的WordPress插件。

    wp plugin install wordpress-seo –version=4.8 –activate
    wp plugin install wordpress-seo –version=4.8 –activate
    wp plugin install wordpress-seo --version=4.8 --activate

    更酷的是,您可以从远程文件安装插件,而不仅仅是在开发插件或使用高级插件时很方便的存储库。以下命令从存储库安装两个插件,一个从Amazon S3服务器安装。

    wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip –activate
    wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip –activate
    wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

    停用多个插件

    要停用单个插件,您可以运行以下命令。

    wp plugin deactivate wordpress-seo
    wp plugin deactivate wordpress-seo
    wp plugin deactivate wordpress-seo

    要一次停用所有插件,请运行以下命令。

    wp plugin deactivate –all
    wp plugin deactivate –all
    wp plugin deactivate --all

    WP-CLI停用所有插件

    WP-CLI停用所有插件

    如果您正在解决兼容性问题并且只需要一举停用所有插件,则上述命令会很方便。然后,您可以返回并一一启用它们,随时进行测试。

    更新插件

    您还可以手动更新WordPress插件。下面的例子:

    wp plugin update wordpress-seo
    wp plugin update wordpress-seo
    wp plugin update wordpress-seo

    WP-CLI手动更新WordPress插件

    WP-CLI手动更新WordPress插件

    数据库搜索和替换

    仅通过复制粘贴数据库难以搬迁站点的主要原因之一是该数据库包含序列化数组。如果您需要http://testsite.comhttp://livewebsite.com序列化数组替换所有实例将没有意义,因为字符串计数不匹配。

    search-replace命令首先反序列化数组,然后执行搜索和替换,然后重新序列化数组。您可以使用一个简单的命令完成此操作:

    wp search-replace oldstring newstring
    wp search-replace oldstring newstring
    wp search-replace oldstring newstring

    附加参数允许您执行更多操作,包括预览将使用--dry-run.

    导出导入

    有两种使用WP-CLI导出内容的方法。您可以创建一个XML文件,就像WordPress导出工具一样,或者您可以导出/导入原始数据库。我发现后者在我的日常生活中更有用,它在同步站点时派上用场。

    wp db export这是您创建SQL文件所需要做的wp db import file.sql全部工作,并且是您导入它所需的全部工作。就像一个魅力,只是小心不要覆盖你需要的任何东西,导入基本上会转储现有的数据库并使用提供的SQL文件代替。

    管理角色和权限

    WP-CLI 可以使用该wp role命令轻松地为您管理角色。如果您想测试您的插件如何与自定义角色一起工作,但您实际上并未在插件中创建角色,那么这非常酷。

    wp role create organizer Organizer
    wp cap list ‘editor’ | xargs wp cap add ‘organizer’
    wp cap add ‘organizer’ ‘manage-events’
    wp role create organizer Organizer
    wp cap list ‘editor’ | xargs wp cap add ‘organizer’
    wp cap add ‘organizer’ ‘manage-events’
    wp role create organizer Organizer
    wp cap list 'editor' | xargs wp cap add 'organizer'
    wp cap add 'organizer' 'manage-events'

    上面的命令将创建一个新角色(Organizer),将编辑器角色的所有功能添加到它,然后添加一个新功能:管理事件。使用正确的命令,您可以使用 WP-CLI更改您的WordPres密码

    生成测试数据

    我喜欢各种类似faker的功能 – 向您的网站添加可用于测试的虚拟内容的功能。WP-CLI内置了其中的一些功能,这里有一些功能可以生成用户、术语和文章。

    wp user generate –count=5 –role=editor
    wp user generate –count=10 –role=author
    wp term generate –count=12
    wp post generate –count=50
    wp user generate –count=5 –role=editor
    wp user generate –count=10 –role=author
    wp term generate –count=12
    wp post generate –count=50
    wp user generate --count=5 --role=editor
    wp user generate --count=10 --role=author
    wp term generate --count=12
    wp post generate --count=50

    管理WP-Cron事件

    您可以在WP-CLI中管理WP-Cron事件和/或WordPress Cron作业。例如,以下命令将为您提供当前的cron事件列表。

    wp cron event list
    wp cron event list
    wp cron event list

    wp-cron事件列表

    wp-cron事件列表

    删除瞬态

    您甚至可以使用以下命令删除和清除一个或所有瞬变。

    wp transient delete –all
    wp transient delete –all
    wp transient delete --all

    如果您正在运行multisite,则需要更复杂的命令。默认情况下,该命令仅检查wp_options表。它不检查wp_1_optionswp_2_options等等。

  • 如何使用Gatsby为WordPress生成静态网站

    如何使用Gatsby为WordPress生成静态网站

    典型的动态网站(例如基于 WordPress 的网站)如何工作?当访问者在浏览器上输入URL或通过链接访问您的网站时,会向您的Web服务器发送请求。

    服务器通过必要的数据库查询收集所需的数据,并生成一个HTML文件供您的浏览器显示。另一方面,静态站点将这些响应存储到服务器上的平面文件中,这些文件会立即传递给访问者。

    静态站点生成器已经存在了很长时间,但它们最近变得越来越流行。在本分步指南中,我们将了解如何将WordPress与静态网站生成器Gatsby集成。

    1. 什么是Gatsby?
    2. 第1步:设置Gatsby
    3. 第2步:如何将Gatsby连接到WordPress
    4. 第3步:创建基本页面模板
    5. 第4步:高级迁移任务

    什么是Gatsby?

    WordPress创建动态网站,需要在服务器上安装一堆PHP、MySQL和Apache或Nginx才能运行。可以通过为您网站上的所有内容生成HTML页面列表来创建WordPress的静态版本。

    这个静态版本的WordPress称为无头WordPress或无服务器WordPress。此转换过程只需执行一次,以便可以多次向访问者提供同一页面。您如何将您的WordPress网站转换为静态版本?这就是Gatsby出现的地方。

    Gatsby或GatsbyJS是一个使用ReactJS构建并由GraphQL提供支持的静态站点生成器。Gatsby允许任何人创建功能丰富、引人入胜的网站和应用程序。Gatsby通过GraphQL从各种来源(包括现有网站、API调用和平面文件)为您的站点获取数据,并根据您指定的配置设置构建静态站点。

    Gatsby是一年前才开发出来的,但大量用户都在尝试Gatsby。Gatsby在各种环境中都得到了认可。Airbnb的数据科学与工程博客的主页由Gatsby提供支持,但实际的博客文章托管在Medium上。

    Airbnb的工程与数据科学博客

    Airbnb的工程与数据科学博客

    BRAUN(博朗)是消费品公司宝洁的品牌。它的加拿大站点由Gatsby托管,而站点上的搜索功能由React提供支持。

    博朗品牌的加拿大网站

    博朗品牌的加拿大网站

    此外,Gatsby还激发了自由职业者开发人员对其作品集的兴趣。诸如Jacob Castro的作品集主要包含静态内容,其中包含作品链接和电子邮件联系方式,因此静态网站非常适合他的需求。

    Jacob D. Castro的作品展示站

    Jacob D. Castro的作品展示站

    为什么选择Gatsby?

    快速网站: 使用Gatsby构建静态网站的主要好处是速度,自从Google宣布在网络搜索排名中使用网站速度以来,网站管理员一直在努力优化速度。加载时间也会影响页面浏览量和转化率。据估计,网站加载时间延迟一秒会导致转化次数减少7%。

    安全性: 您还可以通过静态站点获得额外的安全性。由于提供的是一堆静态文件,因此没有什么可破解的。此外,如果静态文件丢失,您始终可以重新生成它们。

    服务器成本:托管动态站点需要您的服务器与您的技术堆栈兼容。如果您使用的是静态站点,则几乎可以在任何服务器上托管它,这也降低了与托管相关的成本。

    在每次更改时使用Gatsby生成静态站点确实需要JavaScript,这也可以在将静态文件传输到站点之前在本地计算机上完成。

    为什么要避开Gatsby?

    没有内置动态内容: 如果你想使用Gatsby,你需要重新考虑如何控制和提供动态内容,即你需要创建静态/动态的混合来实现这一点(更多关于这个以下)。

    例如,评论需要通过像Disqus这样的服务在外部托管。

    联系表格还需要通过Google表格等外部合作伙伴重新发送。简而言之,您将失去对此类动态内容的直接控制,因为它们的响应未存储在您的服务器上。

    频繁构建不方便: 静态站点也存在频繁重新转换的问题。只有在重新生成页面并将其重新上传到服务器后,您在网站上所做的任何更改才会反映出来。

    技术专长:  Gatsby建立在ReactJS和GraphQL之上。因此,需要一些JavaScript知识和GraphQL的基本概念来处理网站并将其移植到Gatsby。

    静态网站非常适合那些正在寻找具有高安全性的低成本解决方案的人。一些用例是自由职业者的投资组合网站和产品演示网站。

    如果您认为好处大于缺点,那就太好了!我们现在将尝试设置Gatsby以与我们的WordPress站点集成。

    我们在本教程中构建的Gatsby站点的最新版本在GitHub上可供您使用。

    第1步:设置Gatsby

    在本节中,我们将了解如何安装Gatsby并使用Gatsby创建一个基本的静态站点。

    先决条件

    开始使用Gatsby的第一步是检查其先决条件。Gatsby通过npm(NodeJS包安装程序)提供服务。因此,在安装Gatsby之前,您的环境中需要NodeJS和npm。此外,Gatsby要求您安装源代码管理系统Git。

    如果您运行的是Windows,您可以通过下载页面上的安装程序安装NodeJS和Git。在Mac上,您可以下载他们的安装程序或使用自制软件。

    brew install nodejs
    brew install git
    brew install nodejs
    brew install git
    brew install nodejs
    brew install git

    如果您运行的是Linux操作系统,则可以通过apt之类的包安装程序安装NodeJS。

    sudo apt update
    sudo apt install nodejs git
    sudo apt update
    sudo apt install nodejs git
    sudo apt update
    sudo apt install nodejs git

    安装Gatsby

    成功安装NodeJS和Git后,就可以安装Gatsby了!最简单的方法是在终端上运行以下命令(在Windows上使用命令行npm):

    npm install -g gatsby-cli
    npm install -g gatsby-cli
    npm install -g gatsby-cli

    安装程序首先安装依赖项,然后安装Gatsby。您现在已准备好创建您的第一个Gatsby站点。

    构建和部署您的Gatsby站点

    运行以下命令以创建Gatsby站点。

    gatsby new gatsby-wordpress
    gatsby new gatsby-wordpress
    gatsby new gatsby-wordpress

    Gatsby通过克隆Gatsby入门模板在目录/gatsby-wordpress中创建一个站点。您可以提供不同的入门模板进行克隆。克隆完成并安装依赖项后,您可以使用以下命令运行站点的开发版本。

    cd gatsby-wordpress
    gatsby develop
    cd gatsby-wordpress
    gatsby develop
    cd gatsby-wordpress
    gatsby develop

    然后,您可以在http://localhost:8000访问该站点的开发版本。

    Gatsby入门网站

    Gatsby入门网站

    最后一步是构建您的静态站点。以下命令在公共目录中创建静态文件。要将其上传到服务器,您只需将该目录的内容上传到服务器的根目录即可。您可能希望添加像www.example.com/blog/这样的路径前缀作为构建的根URL。

    gatsby build
    gatsby build
    gatsby build

    要在本地启动HTML服务器以显示您网站的这种静态形式,您需要使用serve 命令。请注意,它仅在运行build命令后才有效。

    gatsby serve
    gatsby serve
    gatsby serve

    现在您已经从Gatsby成功创建了一个基本的静态站点,让我们尝试将其与WordPress集成。

    第2步:如何将Gatsby连接到WordPress

    在本节中,您将把您的WordPress网站与Gatsby集成。您可以将Gatsby指向您的WordPress博客的地址,以使其在您运行开发服务器或生成静态页面时能够提取最新数据。

    将Gatsby连接到WordPress的过程是获取由构建触发的WordPress数据。Gatsby获取WordPress数据后,它会根据当前模板创建静态站点。

    该过程使用WordPress站点,该站点具有Gatsby上的文章的来源。为了方便这种交流,您需要通过以下命令安装Gatsby的WordPress插件:

    npm install gatsby-source-wordpress
    npm install gatsby-source-wordpress
    npm install gatsby-source-wordpress

    配置Gatsby

    接下来,将此插件添加到Gatsby的配置文件gatsby-config.js中。

    然后,将以下代码添加到文件中以将Gatsby连接到您的WordPress源。在此示例中,我们在MAMP上使用本地托管的WordPress站点。在旁注中,您可能希望在siteMetadata中编辑站点的标题和描述。

    <code>module.exports = {
    siteMetadata: {
    },
    plugins: [
    {
    resolve: `gatsby-source-wordpress`,
    options: {
    // Specify the URL of the WordPress source
    baseUrl: `localhost:8888/wordpress`,
    protocol: `http`,
    // Indicates if a site is hosted on WordPress.com
    hostingWPCOM: false,
    // Specify which URL structures to fetch
    includedRoutes: [
    ‘**/posts’,
    ‘**/tags’,
    ‘**/categories’
    ]
    }
    }
    </code>
    <code>module.exports = {
    siteMetadata: {

    },
    plugins: [

    {
    resolve: `gatsby-source-wordpress`,
    options: {
    // Specify the URL of the WordPress source
    baseUrl: `localhost:8888/wordpress`,
    protocol: `http`,
    // Indicates if a site is hosted on WordPress.com
    hostingWPCOM: false,
    // Specify which URL structures to fetch
    includedRoutes: [
    ‘**/posts’,
    ‘**/tags’,
    ‘**/categories’
    ]
    }
    }
    </code>
    module.exports = {
    siteMetadata: {
    ...
    },
    plugins: [
    ...
    {
    resolve: `gatsby-source-wordpress`,
    options: {
    // Specify the URL of the WordPress source
    baseUrl: `localhost:8888/wordpress`,
    protocol: `http`,
    // Indicates if a site is hosted on WordPress.com
    hostingWPCOM: false,
    // Specify which URL structures to fetch
    includedRoutes: [
    '**/posts',
    '**/tags',
    '**/categories'
    ]
    }
    }
    

    使用GraphQL获取文章

    在配置文件中指定WordPress站点的来源后,您需要指定需要从WordPress站点提取哪些数据。Gatsby使用GraphQL(一种用于API的开源查询语言)来批量获取WordPress文章。

    在最终确定要选择的查询之前,您可以交互地选择需要从WordPress获取的内容。运行开发服务器并转到URL:http://localhost:8000/___graphql以打开GraphQL编辑器。

    使用GraphQL查询数据

    使用GraphQL查询数据

    完成要拉取的内容后,可以将GraphQL查询添加到文件index.js。

    现在让我们只从每个文章中提取标题和摘录。我们可以稍后添加更多字段。

    import React from “react”
    import { graphql } from “gatsby”
    import Layout from “../components/layout”
    import SEO from “../components/seo”
    export default ({ data }) => {
    return (
    <Layout>
    <SEO title=“home” />
    <h4>Posts</h4>
    {data.allWordpressPost.edges.map(({ node }) => (
    <div>
    <p>{node.title}</p>
    <div dangerouslySetInnerHTML={{ __html: node.excerpt }} />
    </div>
    ))}
    </Layout>
    )
    }
    export const pageQuery = graphql`
    query {
    allWordpressPost(sort: { fields: [date] }) {
    edges {
    node {
    title
    excerpt
    }
    }
    }
    }
    import React from “react”
    import { graphql } from “gatsby”
    import Layout from “../components/layout”
    import SEO from “../components/seo”
    export default ({ data }) => {
    return (
    <Layout>
    <SEO title=”home” />
    <h4>Posts</h4>
    {data.allWordpressPost.edges.map(({ node }) => (
    <div>
    <p>{node.title}</p>
    <div dangerouslySetInnerHTML={{ __html: node.excerpt }} />
    </div>
    ))}
    </Layout>
    )
    }
    export const pageQuery = graphql`
    query {
    allWordpressPost(sort: { fields: [date] }) {
    edges {
    node {
    title
    excerpt
    }
    }
    }
    }
    import React from "react"
    import { graphql } from "gatsby"
    import Layout from "../components/layout"
    import SEO from "../components/seo"
    export default ({ data }) => {
    return (
    <Layout>
    <SEO title="home" />
    <h4>Posts</h4>
    {data.allWordpressPost.edges.map(({ node }) => (
    <div>
    <p>{node.title}</p>
    <div dangerouslySetInnerHTML={{ __html: node.excerpt }} />
    </div>
    ))}
    </Layout>
    )
    }
    export const pageQuery = graphql`
    query {
    allWordpressPost(sort: { fields: [date] }) {
    edges {
    node {
    title
    excerpt
    }
    }
    }
    }
    

    当您检查开发站点时,您会注意到所有来自Wor

  • WordPress高级自定义字段教程

    WordPress高级自定义字段教程

    WordPress自定义字段是使WordPress成为灵活的内容管理系统的重要组成部分,而不仅仅是“一个博客平台”。

    对于WordPress自定义字段,Advanced Custom Fields插件是最知名的名称之一。它使在各个方面使用自定义字段变得更加容易,这也是我们今天文章的主题。

    具体来说,我们将解释为什么高级自定义字段如此有价值,然后逐步向您展示如何将其应用到您的WordPress网站。

    以下是您将在这篇文章中找到的所有内容:

    1. 什么是WordPress自定义字段?他们让你做什么?
    2. Advanced Custom Fields插件使自定义字段更容易
    3. 高级自定义字段教程:如何添加字段
    4. 如何在前端显示高级自定义字段

    什么是Advanced Custom Fields插件?

    由Elliot Condon开发的高级自定义字段(通常简称为 ACF)是一个WordPress插件,允许您向网站添加和管理WordPress自定义字段。它既可以作为免费插件也可以作为高级插件使用,称为ACF PRO,终身更新和1个站点的起价为25美元。

    什么是WordPress自定义字段?他们让你做什么?

    WordPress自定义字段可让您添加、存储和显示有关WordPress中某段内容的附加信息。在更技术层面上,自定义字段可帮助您存储元数据。

    即使您不熟悉这个术语,自定义字段也会为您喜欢的插件和主题中的大部分功能提供支持。

    例如,构建电子商务商店的最流行方式WooCommerce使用自定义字段来存储有关产品的其他信息,例如:

    • 价格
    • 重量
    • 颜色

    或者,如果您有WordPress事件日历插件,该插件将使用自定义字段来存储有关事件的额外信息,例如:

    • 地点
    • 开始/结束时间
    • 价格

    您还可以创建自己的自定义字段来存储与您的独特需求相关的信息,这就是整篇文章的内容。

    什么时候应该使用自定义字段?

    现在,您可能想知道为什么首先需要自定义字段。

    例如,如果您想在您的WordPress网站上发布活动,您不能将所有这些信息作为常规文本放入WordPress编辑器中吗?

    嗯,是的,你可以。但是出于以下几个原因,使用自定义字段是一种更好的方法:

    • 更轻松的输入——而不是从头开始输入内容,布局良好的自定义字段组将使输入数据变得更加容易。例如,您可以直接从日期选择器中选择日期,而不是输入日期。
    • 一致性——您在自定义字段中输入的信息将始终根据您的设置显示,这意味着它将在您的整个站点中保持一致。
    • 易于更新和维护——如果您想更改该信息在未来的显示方式,您可以只更新一件事,而不必单独编辑每个帖子。

    WordPress包括内置的自定义字段功能

    WordPress实际上包含用于向您的内容添加自定义字段的内置功能。在经典的TinyMCE编辑器中,您可以从屏幕选项区域启用此功能。或者,在新的区块编辑器中,您可以从选项区域启用它:

    如何在区块编辑器中访问自定义字段

    如何在区块编辑器中访问自定义字段

    然后,您可以使用键/值对输入自定义字段数据:

    内置的WordPress自定义字段功能

    内置的WordPress自定义字段功能

    这种本机自定义字段功能是完全实用的,但它不是最用户友好的做事方式,这就是为什么很多人转而使用高级自定义字段插件的原因。

    Advanced Custom Fields使其更容易

    简而言之,Advanced Custom Fields使在WordPress中使用自定义字段变得更加容易……几乎所有方面。

    它简化了在WordPress仪表盘中添加和管理自定义字段的界面,还简化了在站点前端显示自定义字段信息的过程。这一事实仅有助于解释为什么它在超过100万个网站活跃,并在1,000多条评论中获得4.9星评级

    在后端,它可以让您创建用户友好的元框,其中包括预选的字段类型。因此,您将能够使用日期选择器、复选框等,而不是通用键值对接口(如您在上面看到的那些):

    区块编辑器中的高级自定义字段

    区块编辑器中的高级自定义字段

    高级自定义字段总共提供 30 多种不同的字段类型,您可以将它们添加到仪表板中的任何区域,包括文章、用户、分类法、媒体、评论,甚至自定义选项页面。

    您可以在此处查看有关每种字段类型的详细信息

    高级自定义字段还通过详细记录的功能、简码、古腾堡块等,使显示该信息变得更加容易。

    或者,您可以找到与其他工具的集成,例如一些拖放式WordPress页面构建器

    Advanced Custom Fields免费与专业:您需要哪一个?

    高级自定义字段既有免费版本,也有价格实惠的高级版本。

    对于大多数基本用途,免费版本完全没问题。它使您可以访问几乎所有的字段类型,以及上面概述的所有节省时间和用户友好的功能。

    如果您只想存储有关您的内容的一些额外信息,免费版本就是您所需要的。

    话虽如此,专业版确实添加了一些非常方便的功能,可以帮助您以更有趣的方式使用高级自定义字段:

    • 重复字段——这些允许您在逐个帖子的基础上重复某些字段/字段组。例如,如果您要向事件添加有关发言人的信息,中继器字段将帮助您处理有多个发言人的情况(您可以根据需要多次“重复”发言人的字段,它可以让您处理有多个扬声器的边缘情况)。
    • ACF区块– 将您的字段显示为Gutenberg区块,而不是元框。如果您正在为客户构建站点并希望为他们提供一种简单的方法来输入和可视化自定义字段数据,这将特别方便。
    • 灵活的内容字段– 从其他字段创建布局。它有点像基于自定义字段信息的轻量级页面构建器。
    • 图库字段– 将多个图像上传到单个字段。

    还有一些其他差异,例如选项页面、克隆字段的能力、对关系字段的改进以及其他较小的调整。

    您可以在此处查看所有ACF PRO功能

    ACF PRO起价为25美元,可在单个站点上终身使用。或者,您可以支付100美元在无限网站上终身使用。

    如有疑问,请从免费版本开始,直到您确切了解所需的功能。如果需要,您可以随时升级。

    Advanced Custom Fields教程:如何添加字段

    现在让我们深入研究实际的高级自定义字段教程,我将向您展示如何创建和显示您的第一组自定义字段。

    对于这个例子,假设你有一个关于跑步的博客。你喜欢……真的很喜欢跑步,你想与你的读者分享你的日常锻炼。具体来说,对于每篇博文,您都想分享一次跑步:

    • 目的——假设你有两种不同类型的跑步:“速度训练”和“训练”。
    • 距离——你跑了多长时间。
    • 开始时间——你开始跑步的时间。
    • 完成时间——你完成跑步的时间。
    • 位置——你跑步的地方。

    要收集该信息,您需要添加五个自定义字段。

    请务必注意,您将在此高级自定义字段教程中学习的原则适用于任何用例。我们只是选择一个具体的例子,因为它有助于有一个具体的例子来连接。

    我们将把本教程分为两部分:

    1. 如何在后端添加和管理您的自定义字段。
    2. 如何在您的网站前端显示自定义字段信息。

    1.创建一个新的字段组

    从WordPress.org安装并激活Advanced Custom Fields的免费版本后,转到Custom Fields > Add New以创建您的第一个Field Group

    顾名思义,“Field Group”是一组一个或多个自定义字段,它们一起显示在您的WordPress仪表盘中。

    对于此示例,您将创建一个包含五个自定义字段的字段组。

    为您的字段组命名,然后选择其Location。在本例中,我们希望为常规WordPress博客文章显示这些自定义字段,因此您可以将其保留为默认Post

    但是,如果您想在其他地方显示自定义字段,例如自定义文章类型或分类,您需要更改此设置。您还可以设置多个规则以在多个位置显示您的字段:

    创建一个新的ACF字段组

    创建一个新的ACF字段组

    2.添加自定义字段

    接下来,单击+ Add Field按钮以添加您的第一个自定义字段:

    添加新字段

    添加新字段

    这将打开很多选项,但您不一定需要填写所有内容。

    两个最重要的选择是:

    • Field Label——这是将出现在编辑器中的内容。它还将用于生成字段名称,这是您将在代码中使用的名称。您不需要更改字段名称(尽管您可以根据需要更改)。
    • Field Type— 这是您要收集的信息类型。例如,您需要一个Number字段来收集号码信息或一个Email字段来收集电子邮件地址。

    对于第一个字段,您需要一个Radio Button字段类型:

    配置字段

    配置字段

    再往下,您可以在“Choices框中输入单选按钮选择选项:

    输入单选框选项

    输入单选框选项

    您还可以做出许多其他选择,例如是否需要字段和默认值。随意配置这些以满足您的需求。

    让我们看另一个示例:用于收集跑步距离的自定义字段。这一次,您需要一个Number字段类型:

    创建数字字段

    创建数字字段

    您还可以通过选择Append距离单位使事情变得更加用户友好。如果您愿意,您还可以使用Minimum ValueMaximum Value添加验证。例如,你可能不会跑1000英里(如果你这样做了……天哪,你就是终极阿甘正传)!

    更多字段设置

    更多字段设置

    只需对您要收集的所有其他自定义字段重复该过程。完成后,它应该看起来像这样:

    5个不同的ACF字段

    5个不同的ACF字段

    3.配置设置和发布

    要完成任务,请向下滚动到“Settings框。在这里,您可以控制字段在WordPress编辑器中的显示方式。

    大多数情况下,您可以将这些保留为默认值。但是,如果您愿意,请随时更改。例如,您可以选择在常规WordPress编辑器上方显示自定义字段:

    WordPress高级自定义字段教程-5

    配置ACF字段组设置

    做出选择后,Publish您的字段组以使其生效。

    4. 在WordPress编辑器中添加一些信息

    发布字段组后,您会在创建新文章时看到您的字段。

    默认情况下,它们将一起出现在经典TinyMCE编辑器和新区块编辑器中的编辑器下方:

    区块编辑器中的高级自定义字段

    区块编辑器中的高级自定义字段

    您在此处输入的信息将存储在您网站的WordPress数据库中,以便于检索(您将在我们的高级自定义字段教程的下一部分中看到)。

    探索条件逻辑

    在我们继续之前,让我们快速绕道。

    看,高级自定义字段如此受欢迎的原因之一是它允许的所有有趣的实现。

    这里一个强大的选项是条件逻辑(Conditional Logic),它允许您根据前一个字段的回答方式显示/隐藏字段。

    让我们看一个简单的例子来说明它是如何工作的……

    假设您想写关于食物、旅行或跑步以外的任何内容的博客。当您撰写关于非运行主题的文章时,显示有关运行信息的自定义字段没有多大意义,对吧?

    如果不是自动显示您刚刚创建的所有自定义字段,而是可以添加一个自定义字段,上面写着“Is this a run?”:

    条件逻辑示例

    条件逻辑示例

    如果您选中该框,则运行信息字段会自动出现。如果您不选中它,它们将保持隐藏状态:

    选中时显示其他字段

    选中时显示其他字段

    这就是条件逻辑允许您做的事情!

    要进行设置,您将编辑您的字段组并为“Is this a run?”添加一个新的True/False字段:

    添加True/False字段

    添加True/False字段

    然后,您将编辑现有字段并打开条件逻辑(Conditional Logic),以便每个字段仅在“Is this a run?”时显示。检查字段:

    向其他字段添加条件逻辑

    向其他字段添加条件逻辑

    如何在前端显示高级自定义字段

    好的,我们的高级自定义字段之旅已经完成了一半。您现在可以将信息添加到您的自定义字段,将其与相关的文章类型相关联,并将其存储在您的数据库中。

    但是,仍然存在一个潜在问题:自定义字段中的信息还没有出现在前端的任何地方!

    也就是说,即使您为博客文章添加了一些自定义字段到编辑器,您的博客文章仍然看起来像前端的普通博客文章:

    前端没有自定义字段

    前端没有自定义字段

    让我们解决这个问题。

    您可以通过几种不同的方式在网站前端显示高级自定义字段数据。您选择的确切方法将取决于您的需求和知识水平。以下是实现这一目标的三种不同方法:

    1. 您的主题的模板文件——这需要一点技术知识,但大多数时候这是最好的方法,尤其是当您对使用主题的模板文件感到满意时。
    2. 使用简码– 如果您只想逐个插入自定义字段数据,这是一个超级简单且不错的选择。但是,它需要更多的手动工作,因为您需要为每个文章添加短代码
    3. 使用Elementor Pro — 这很棒,因为它完全无需使用PHP,但它是一款优质产品,这也意味着您需要使用Elementor Pro进行模板制作。

    您可以单击上方直接跳转到特定方法,也可以通读所有方法。由你决定。

    如何在主题模板文件中添加高级自定义字段

    显示自定义字段信息的第一种方法是将高级自定义字段的PHP函数直接添加到子主题的模板文件中

    这有点高级,因为它需要您深入研究主题的模板文件,但它可以确保您的自定义字段每次都会自动显示在同一位置。

    具体来说,您需要为相关文章类型编辑single模板。

    对于普通的博客文章,这是single.php。或者,一些主题将事物分解为模板部分。例如,对于TwentyNineteen主题,您实际上需要编辑content-single.php模板部分。

    如果您在这里感到迷失,您可能想要使用不同的方法。

    找到单个文章的主题模板文件后,您可以使用高级自定义字段的the_field()函数来显示字段的信息。例如,

    <?php the_field(‘FIELD_NAME’); ?>
    <?php the_field(‘FIELD_NAME’); ?>
    <?php the_field('FIELD_NAME'); ?>

    在此处了解更多信息。

    例如,要显示“Purpose”字段,您可以使用

    <?php the_field(‘purpose’); ?>
    <?php the_field(‘purpose’); ?>
    <?php the_field('purpose'); ?>

    您可以在编辑字段组时找到字段名称:

    在哪里可以找到ACF字段名称

    在哪里可以找到ACF字段名称

    因此,将一点HTML标记与PHP结合起来,您可能会得到类似这样的东西来显示所有字段: