如何轻松地将帖子过滤器添加到WordPress网站
我遇到的常见请求是能够让用户过滤或排序,在他们的网站前端上删除.
或许用户想要按字母顺序查看帖子,或者也许只看到那些用缩略图的帖子?这对常规帖子来说已经有意义,但在产品,照片或其他内容类型的情况下可以更有意义.
在今天的周末WordPress项目中,我将为您提供一种快速的破旧,如何在二十五十个主题中实现这样的功能.让我们变得破解!
创建子主题
一如既往,你需要一个孩子主题.我们在WPMU DEV上有一个指南,我就在wpmu dev上,我建议您提供读取,如果您不熟悉子主题.
创建控件
让我们添加三个控件:一个用于订购帖子,一个用于设置排序的方向,一个用于仅显示缩略图的帖子.
第一步是将父主题的index.php
复制到我们的子主题中.
在子主题中打开index.php
文件并粘贴主容器下方的以下HTML(应在线20):
这是它在前端的样子:
不是如此漂亮但我们的形式位于正确的地方
你可以看到我们缺乏一点造型.让我们通过向样式表添加一些样式来解决:
加载主旨E12C354BC6C9C95C497D
可以完成更多的工作,但它看起来很漂亮
我经常从新人听到编程的反应是:"他是如何知道这些是将使它融入主题的样式?"
解决方案很简单:我作弊.我使用Chrome中的开发人员工具来检查常规文章元素.在这种情况下,它让我看看元素如何获得盒子阴影和他们的边距,我只是将这些规则应用于我自己的元素.
修改查询
让我们选择"按标题顺序,"升序"和"带有缩略图的帖子"并提交表单.你实际上应该看到一个改变而不为代码做任何事情.
要了解为什么,让我们检查网址.它应该是这样的:
http://yourdomain.com/?orderby=post_title&order=DESC&thumbnail=only_thumbnailed
可以使用$_GET
变量在我们的PHP脚本中调用信息的TIDBits.WordPress已经知道订单和Orderby参数是什么意思,它在默认查询中使用它们.结果,如果我们只需要订购和订单方向,我们实际上都已完成.
这一切都很棒,但再次,如何我知道这个吗?我可以用"Order_By"作为参数而不是"Orderby".在这种情况下,WordPress不会接受我们的意图.我看看 wp_query 文档在Wordpress Codex中有一堆参数,许多参数其中可以用于URL.
现在,让我们实现我们的帖子缩略图参数.如果它具有与其关联的密钥_thumbnail_id
的元数据,则帖子有一个缩略图.我们需要修改我们的查询以确保将其考虑在内.让我们现在使用query_posts()
.
在文件顶部的get_header()
函数上方粘贴以下代码:
我们将原始查询的参数与我们自己的新参数合并,这会导致不同的一组帖子.我们的表格现在有效,但它不记得我们的选择.让我们通过重写我们的表格并使用一些PHP来解决这个问题.
更智能的形式
除了按选择器列出订单的所有选项,我们还需要一种方法来指示选择了哪一个.如果我们在没有循环的情况下这样做,那么它看起来像这样:
你明白了吗?我不怪你!在每个选项中,我们都会检查当前所选值是否等于选项的值.如果是,我们输出所选属性.让我们用循环进行很多清洁剂:
这有点较长,但仅是因为我们有三个选项.这是管理任何选择的更好格式的方式.让我们将其扩展到整个形式:
所有完成.现在,表单应该记住基于URL中的$_GET
变量的选择.
WordPress行为
记住我如何提到我知道使用"订单"和"Orderby",因为我看过WP_Query文档?这是良好的做法,但它可能会导致意外结果.找到您拥有的类别的SLUI,例如此类别是"WordPress".
现在使用以下URL:http://yourwebsite.com/?category_name = wordpress.您应该看到您的类别存档,列出所有WordPress帖子.这很好,但我们有两个问题:
如果您有相当永久链接打开(应其中),页面已被重定向到新的URL,大多数可能http://yourwebsite.com/category/wordpress.我们的过滤器不会看到,因为archive.php
文件处理此视图,而不是index.php
.此外,我们的类别名称未作为URL参数传递,因此我们需要使用一些额外的诡计来使我们的过滤器工作.
使这项工作的快捷方式是故意 not 使用相同的参数WordPress使用.您可以使用URL中的catname
参数传递类别名称,因为WordPress不会接受此问题.然后,您可以使用正确的参数名称将其归入查询.这样的东西:
替代方案是使用函数而不是在index.php
中输出我们的表单.您需要检测WordPress查询本身的类别,并根据此显示当前选择.
结论
添加自己的过滤器并不是那么困难,但需要有点摆弄.在我们的情况下,您可能需要确保在订单设置为随机时删除分页.它可以被"显示更多随机性"按钮所取代,只需重新加载页面.
希望这篇文章给了你如何为自己完成这个问题的基础知识,你将能够建立所需的过滤器.
标签: