使用Add_Filter修改现有插件功能

时间:2020-07-23 作者:odd_duck

我对Wordpress和使用自定义过滤器和挂钩比较陌生。我的网站使用TablePress 插件。但我需要能够添加

role=presentation

到通过插件创建的所有表。唯一的方法是

没有直接的方法来添加它,但您可以使用tablepress\\u table\\u tag\\u attributes过滤器挂钩来更改元素的属性。过滤器在类render中定义。php

根据https://wordpress.org/support/topic/table-role/#post-9665599

这个class-render.php 提及如下:

$table_attributes = apply_filters( \'tablepress_table_tag_attributes\', $table_attributes, $this->table, $this->render_options );
$table_attributes = $this->_attributes_array_to_string( $table_attributes );

https://github.com/TobiasBg/TablePress/blob/master/classes/class-render.php#L519

在我的functions.php 我添加的文件:

add_filter( \'tablepress_table_tag_attributes\' , \'add_presentation_role\', 11);
function add_presentation_role() {
    // return ?
}
但我很难看到我需要在我的功能中加入什么。我输入的任何内容都会破坏我的网站或导致一个空白页面。要确认,我想添加角色属性,以便我的表从更新

<table id="tablepress-{ID}" class="tablepress tablepress-id-{ID}">

<table id="tablepress-{ID}" class="tablepress tablepress-id-{ID}" role="presentation">

1 个回复
最合适的回答,由SO网友:mozboz 整理而成

因此,您的代码已经完成了一半,您只缺少一小部分,即您的筛选函数通过函数参数获取有关其筛选内容的信息,然后可以对正在筛选的内容进行更改(或不进行更改),然后必须将其传回(返回)。一、 e.在这种情况下,如果出于某种原因,代码决定不想更改$table\\u属性,那么仍然需要返回传入的属性。

因此,如果这是过滤器的运行方式:

$table_attributes = apply_filters( \'tablepress_table_tag_attributes\', $table_attributes, $this->table, $this->render_options );
这意味着您的筛选函数应至少如下所示:

function add_presentation_role($table_attributes, $table, $render_options) {
    // do some stuff to $table_attributes
    return $table_attributes;
}

add_filter( \'tablepress_table_tag_attributes\' , \'add_presentation_role\', 11, 3);
注:

进入自定义函数的参数与调用过滤器的参数匹配。你不必使用它们,但如果你需要这些信息,它们是可用的

  • 如果不使用这些参数,则不必获取所有参数,但这不会造成任何伤害,而且我很高兴您的过滤器函数与过滤器的调用方式相匹配,所以我没有研究$table_attributes 变量,但您可能只需要向其添加额外的属性,然后将其返回到过滤器中。您需要参考文档或阅读此插件的代码来查看该变量的结构。(可能是一个关联数组,因此您可以$table_attributes[\'new_attribute_name\'] = "new_attribute_value", 但这只是一个猜测,你应该确认一下。)

    希望能有所帮助,如果你需要更多信息,请在这里发布。

  • 相关推荐

    Calling hooks in functions

    我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是