跳到:
内容
页码
类别
搜索
顶部
底部

设置bbPress论坛的分步指南–第5部分

Codex主页设置bbPress论坛的分步指南–第5部分

1.使用过滤器

动作和过滤器添加了一种强大的方式,可以改变bbPress(当然还有WordPress)的工作方式。

对于WordPress的新手来说,它们可能也是最难理解和查找信息的领域之一。本教程试图揭开其中一些领域的神秘面纱,并帮助新手编写代码,使他们的网站能够按照自己的意愿工作。

第4部分处理“操作”时,本节处理“过滤器”

它确实重复了Actions中的一些初始文本,因为它适用于两者。

2.引言。

如果你熟悉函数和过滤器,你可能不需要阅读这篇文章的大部分内容,但我想如果你在这里,那么你会像我一样看到一些片段和“简短”的解释,这些片段和解释会让你非常确定你想要的可以完成,但无法找到确切的方法或使其工作。

因此,在这个阶段,冲一杯咖啡,把孩子们关在门外,我将尝试向你们介绍我到目前为止学到的关于过滤器的知识。

如果您可以改进解释,纠正我所犯的任何错误,或者以任何其他方式提供帮助,只需在支持论坛上发布一个关于“请求和反馈”的主题,我会继续关注。

3.过滤器

如果操作在特定点添加内容(请参见第4部分)过滤器是一种在特定点更改显示内容(通常是数据的哪些位或格式/顺序)的方法,而无需更改文件中的代码。

如果

所以从本质上来说添加和过滤器更改。 但是过滤器实际上是什么过滤器? 它过滤了一个函数,所以我们需要在前进之前了解函数

4.功能说明

函数是一组代码,当组合在一起时会执行某些操作。在WordPress中,函数既可以隐藏复杂性,又可以节省到处重复的无休止的代码行,还可以提高可管理性。

所以在bbpress中,进入数据库并获取帖子作者身份的代码行都被放入一个名为bbp_get_reply_author_id的函数中。任何时候我们想这样做,都可以引用该函数,并使用多行代码来保存自己。如果bbPress背后的人想改变它的工作方式,他们只需要做一次,所有使用这个的实例都会使用新函数。

所以让我们创建一个简单的函数(稍后我们将看到一些真实的bbPress示例!)

函数hello(){$text=“你好,罗宾”;echo$text;}

第1行创建函数
第2行将$text变量设置为Hello Robin
第3行将该文本写入屏幕

然后每当在wordpess-php文件中调用时,例如

您好();

它会写出结果。

我们可以将此函数放在functions.php文件中,或放在插件中。

现在bbPress是一个插件,在bbPress中,有数百个函数位于多个位置。

所以想象一下,有人在上面写了“hello”函数,并把这个函数埋入了他们的插件中,这个函数在很多地方都有使用。然而,你不想让它说“你好罗宾”,而是“你好弗雷德”。现在您可以在插件中找到函数并更改文件中的代码,但在插件的任何升级中,您都会丢失更改。因此,如果您可以更改变量$text,并且过滤器提供了一种方法,那会更好。

5.并非所有功能都可过滤

上面的函数不能被过滤,因为它还没有被编写成允许过滤的——希望您遇到的所有函数都已经被过滤了——所以让我们重新编写它以使其可过滤。

函数hello(){$text=“你好,罗宾”;$text=应用过滤器('hello',$text);回声$text;}

已添加第3行。本质上说,如果存在过滤器,则将该过滤器中的$text值替换为函数。

因此,现在如果我们创建一个过滤器并向其添加一个更改$text的函数,那么无论$text在该过滤器中的值是什么,都会替换函数中$text原来的值。所以我们可以让“Hello Robin”变成“Hello Fred”,而不需要修改任何代码。

因此,让我们为此创建一个过滤器。与操作一样,我们通过创建函数来实现这一点。

所以上面的原始代码被隐藏在其他插件中。我们的新代码将位于函数文件或插件中,并更改原始代码的效果,将$text=“Hello Robin”更改为$text=”Hello Fred”。

因此,生成的代码看起来像

//函数将“Hello”函数中的“Hello Robin”更改为“Hello Fred”函数called_anything(){$text=“你好,弗雷德”;返回$text;}add_filter('hello','called_anything');

让我们来看看这个。

5.1名称

首先让我们处理命名

我们正在创建一个函数,函数可以被调用。然而,每个功能(已经有数千个)必须在您的网站上有一个唯一的名称。考虑到你有核心的wordpress和可能有很多插件,重要的是不要创建重复的名称。将其称为“robin_w_hello”可能会使其非常独特。

在函数的开头添加注释行来提醒您这是在做什么也很重要,因为当您的文件中开始有很多注释行时,您永远不会记得这一点是做什么的。

5.2引入变量

在第1行中,我们使用函数called_anything()。()是将任何变量放入函数中的区域。因此,如果我想修改$text而不是替换它,我会将其放入()中,以便将其引入ie函数called_anything($text)。在这种情况下,我可以使用一些字符串操作从前面去掉hello。因此,如果您想操作核心函数中的数据,请将其导入此处。

5.3返回数据

第3行包含一个返回命令。这样可以确保将数据传递回主函数。如果省略,那么您计划更改的任何变量都将为空,因此不会显示。

5.4添加过滤器和删除过滤器

在最后一行中,我们向“hello”添加了一个名为“called_anything”的过滤器

在这种情况下,我们添加了过滤器。还有另一个名为remove_filter的命令用于删除过滤器——如果其他人的插件中有一个过滤器进行了您不想要的更改,则该命令非常有用。

6.apply_filter可以与函数具有不同的名称!

好吧,如果你现在还没有发疯,你就申请使用名称筛选对函数,而不是对函数名应用筛选器。因此,apply_filter可以与函数具有不同的名称,实际上,在一个函数中可以有多个过滤器。

因此,虽然我们在函数“hello”中有一行是这样说的

$text=apply_filters('hello',$text);

applyfilter(“hello”是过滤器的名称,可以是任何东西(或者说是站点特有的东西!)

因此,虽然没有人会以这种方式编写函数,但我们可以

函数hello(){$text1=“你好,罗宾”;$text1=应用过滤器('hello_change1',$text);$text2=“再见罗宾”;$text1=apply_filters('hello_change2',$text);回显$text1.$text2;}

除非你需要知道,否则我不会告诉你这个,所以你会经常发现wordpress和bbPress中的过滤器与它们的函数名不同。事实上,我们稍后会看到,它们经常是不同的,但它们有一个逻辑,这曾经是已知的,意味着你可以解决它。

7.为数组创建筛选器

数组是保存在单个数据名中的一组数据

例如

$data=数组(
“name”=>“Robin”,
“年龄”=>“21”,
);

数组$data现在包含我的姓名和年龄。

大多数bbPress函数创建数组,因为它们使用多个数据,所以让我们创建一个具有数组的函数,并输出一些数据

函数hello(){$data=数组(“name”=>“Robin”,“年龄”=>“21”,“text”=>“年”,);$data=应用过滤器('hello',$data);echo$data[“名称”]。“是”$数据[“年龄”]$数据[“文本”];}

在php文件中调用hello()将导致以下结果
“罗宾21岁。”

比方说,我们想把措辞改为“罗宾21岁了。”

因此,我们需要将$data['text']改为“years young”

因此,我们将编写一个函数来完成此操作,并添加一个过滤器来实现它

结果如下

//这将添加一个过滤器,将$data['text']更改为'years young'函数called_anything($data){$data['text']='年轻几岁。';返回$data;}add_filter('hello','called_anything');

让我们仔细看看

如果我们刚刚有了“function called_anything()”,那么我们所做的任何更改都将重置整个数组,因此我们需要“引入”当前值calledanything($data)'将数组引入我们的新函数。

第二行更改“text”值,第三行将新数组返回到原始函数

所以现在这个数组看起来像
'name'=>'罗宾',
“年龄”=>“21”,
“text”=>“年轻几岁”,

结果是“罗宾21岁了”——完成了!

现在我们准备看一些真实的bbPress示例。

8.查找代码

那么我们需要查看的代码在哪里?

这当然是bbPress的第一个问题(就像WordPress的其他部分一样)——找出需要修改的文件。

对于bbPress,所有关键的模板文件(最有可能是您想要更改的)都保存在文件夹中

Wp-content/plugins/bbpress/templates/default/bbpress(Wp-内容/插件)

虽然许多名字都能很好地说明它们的作用,但在找到你想要的名字之前,你可能需要深入研究几个名字。

我计划列出这些模板,以及它们在我完成时所做的事情!

但让我们从WordPress中显示的内容开始,然后再进行修改。您已经找到了涵盖此内容的模板文件,其中有一个函数,用于显示要更改或更改其显示的数据。

所以我们需要创建一个过滤器。

9.添加过滤器的位置

在本教程中,我们将生成您需要的代码,但很明显,代码需要放在某个地方。那么我们把它放在哪里?

我们将动作或过滤器添加到函数文件中,或将其创建为插件。

这两种方法都有各自的用途。

如果你喜欢使用插件,那么它们是一种添加更改的好方法,如果你有多个站点,它们也能很好地工作,因为插件很容易上传到每个站点。但他们确实需要更多的知识来编写代码。但是在谷歌上搜索主题,你会发现创建主题有很多帮助。然后把代码放进去,上传到你的网站上。

另一种方法是使用函数文件。由于您现在正处于使用WordPress的“高级”阶段,您应该要么开发自己的主题,要么使用Childtheme存储细节。

如果你仍然只有其他人的主主题(例如wordpress默认主题、免费主题或高级主题),那么你应该创建一个子主题。这只是使用主主题,您可以将调整添加到子主题。然后,如果更新了主主题,则不会覆盖子主题中的调整。有关创建儿童主题的帮助,请在谷歌上搜索“儿童主题wordpress视频”,您会发现许多演示。如果有人已经为你建立了一个网站,它可能已经是一个在一个孩子的主题,再次视频会让你看看是否是这样。

在我们的子主题中,我们将放置一个functions.php文件,我们设置的操作和过滤器将进入其中。

10.我们可以更改的代码示例

所以,为了开始了解我们需要做什么,让我们看看我们可能想要改变的东西

在论坛展示中,我们在每个论坛旁边都有一些主题和回复,即:
论坛

假设我们要删除这些计数并使其看起来像

弗伦布

现在我们可以通过更改执行此操作的模板来完成此操作。事实上,法典有一页布局和功能–您可以使用的示例第2节介绍了如何通过更改名为loop-single-forum的模板来更改此设置。但是,如果我们更改了该模板,则需要将其存储在不同的位置,以便以后的更新不会覆盖它。这很容易做到,没有理由不这样做,但添加过滤器也是一个同样有效的选择。

那么从哪里开始呢?

好吧,让我们先总结一下我们将要做的事情,然后您可以按照这些步骤进行操作。
a) 查看模板,找出哪个模板具有我们想要更改的功能
b) 查看代码,看看是否有该函数
c) 如果是这样的话,我们可以看到论点,
d) 如果没有,那么我们需要查找函数定义
e) 然后对过滤器进行编码

看起来很容易,但这有点像侦探,你必须遵循线索。

a) 首先,我们发现bbPress将插件的所有主要“显示”区域存储在一个位于的模板文件夹中
wp-content/plugins/bbpress/templates/default/bbpress

我计划列出哪些模板做什么,但目前这确实是一个智能猜测和大量打开文件和检查的情况。通常,任何包含列表的东西都会运行循环(遍历列表),所以循环是一个不错的选择。

因此,由于我们正在查看论坛列表,我们隐约看到了具有循环和论坛的模板。在某些阶段,我们打开了循环论坛,在那里我们看到了从论坛标题、论坛描述、子论坛,然后是一些主题、回复和新鲜度计数的进展。

单击此处查看文件–在新窗口中打开,以便您可以在该窗口和代码之间切换。

第30行的子论坛列表部分

bbp_list_forums();

看起来很可能是候选人,所以让我们看看这个。我们接下来会这么做。

b) 所以让我们看看代码,看看关于这个函数写了什么。转到文档(本节)并选择任何一篇文章——您实际上正在阅读这篇文章,所以这很好。在左手边,你会看到一个“相关”区域。您需要从本文向后滚动才能看到它。在列表中查找函数–在本例中为'bbp_list_forums',它已经列出了(还不是全部!)

打开这个,你会看到它列出了下面的参数(同样也不是所有参数都列出了,所以请看d),如果你的参数不在那里的话。

过滤器5

其中包括“显示主题计数”和“显示回复计数”,您会看到它们被设置为“True”——将它们设置为false应该会隐藏细节。

您还会看到一行,上面写着“要过滤这个数组,请使用add_filter('bbp_before_list_forums_parse_args','your_filter_name)”,这就是我们需要的过滤器。如前所述,过滤器名称可能与函数名称不同。因此,bbp_list_forums使用“bbp_before_list_forums_parse_args”来更改数组。(实际上,这个函数中还有一个过滤器,它有函数名,但我们暂时忽略它!)

因此,我们将创建一个函数来更改主题并将值回复为false,这样它们就不会显示,并添加一个过滤器来实现它。

数据保存在一个数组中,因此我们需要使用该代码。

所以让我们从函数开始

函数hide_forum_counts($args=array()){$args['show_topic_count']=false;$args['show_reply_count']=false;返回$args;}

然后我们将添加过滤器

添加过滤器('bbp_before_list_forums_parse_args','hide_forum_counts');

此代码将放在我们的函数文件中(或作为插件)。

d) 但如果法典没有显示过滤器呢?我们如何找到要使用的过滤器?

好的,我们可以解决这个问题。我们将从bbp_list_forums开始。我们需要为定义该功能的地方提供资金。

现在,模板wp-content/plugins/bbpress/templates中使用的所有函数都保存在以下5个模板文件夹中:

wp-content/plugins/bbpress/includes/forums/template.php
wp-content/plugins/bbpress/includes/topics/template.php
wp-content/plugins/bbpress/includes/replies/template.php
wp-content/plugins/bbpress/includes/users/template.php
wp-content/plugins/bbpress/includes/search/template.php

当我们列出论坛时,我们可以打赌它会出现在wp-content/plugins/bbpress/includes/forums/template.php中,但如果你没有线索,那么将插件下载到你的电脑上,将其解压缩到一个目录中,然后使用你电脑的serach函数查找它。但一定要搜索“bbp_list_forums”,而不是“bbp_list_forum()”'因为bbPress函数通常都有参数,所以()将包含内容,您的搜索将返回nil!

所以我们找到wp-content/plugins/bbpress/includes/forums/template.php
然后把它打开。我们在744号线看到里面

函数bbp_list_forums($args=''){

然后去801线

echo apply_filters('bbp_list_forums',$r['before'].$output.$r['after'],$r);

因此,我们认为要添加的过滤器是“apply_filters('bbp_list_forums'”。但不,这个过滤器是在所有函数都发生之后才添加的。我们只想更改几个输入参数。

在函数的开头,我们发现:

//根据默认值分析参数$r=bbp_parse_args($args,数组('之前'=>'&书信电报;ul类=;bbp-论坛-列表>','之后'=>'&它/ul>','link_before'=>'&书信电报;li类=“;bbp论坛>','link_after'=>'&它/li>','count_before'=>'(','count_after'=>')','count_sep'=>',','分隔符'=>',',“论坛id”=“”,“show_topic_count”=>是的,“show_reply_count”=>是的,),'列表论坛');

这是bbPress中常见的格式,实际上与wordpress中使用的函数类似。

它使用一个名为“bbp_parse_args”的函数来创建针对所有参数的过滤器。

创建的过滤器的格式为“bbp_before_”,后跟X,后跟“_parse_args”。X是bbp-parse_args函数的第三个参数–如果您查看上面的代码,就会发现它实际上是

bbp-parse_args($args,数组(…),'list_forums')

所以在最后一行,我们看到了“列表论坛”,即上面的X。实际上,这是没有bbp起始位的函数。

因此bbp_list_forums的数组过滤器是“bbp_before_list_forums_parse_args”
例如,bbp_get_topic_pagination将是
bbp_before_get_topic_pagination_parse_args之前

好的,这是一个很长的解释,需要你读几遍,随着我的进度,我会添加更多的例子。

如上所述,如果需要任何反馈或澄清,请在
请求和反馈

跳到工具栏