将数组从短码函数传递到筛选函数

时间:2019-09-18 作者:Steeven

这可能是一个php问题,而不是wordpress问题。虽然我不确定,但如果是的话,请指导我。我正在开发一个试用插件,用于插件开发第一阶段的培训。

以下是结构的简化示例:

class trial{

    function trial() {
        add_shortcode( \'shs_ref\', array( &$this, \'shortcode\' ) );
        add_filter( \'the_content\', array( &$this, \'after_content\' ));
    }

    /*Run the shortcode*/
    function shortcode( $atts , $content = null ) {

        if ( !isset( $this->entries ) )
            $this->entries = array();

        array_push($this->entries,$content);

        return \'What number of shortcode is this: \',count($this->entries);

    }

    /*Add after the page content*/
    function after_content( $content ) {

        foreach($this->entries as $entry) /*This one is empty?*/
           $content .= $entry;

        return $content;
    }

}

new trial();
shortcode 函数,数组$this->entries 正在填充内容$content 用户已将其包裹在短码夹中。对于短代码的每一个新场合,其内容都会通过php的array_push. 然后我可以用这个不断增长的阵列做些什么$this->entries (例如,计算其内容,如示例中所示)。

所有这些都很好,而且很有效。

当我需要一个filter函数来使用相同的数组时,问题就出现了。我想在页面底部添加一个所有收集的短代码内容的列表。在代码的顶部,我使用add_filter 其中通过the_content 到调用的其他函数after_content. 这是可行的,整个页面内容都可以由该函数处理。但是$this->entries 数组为空。在shortcode 函数,但在after_content 之后的功能。

我已尝试设置$this->entries 数组作为全局变量,例如通过添加var $stored_entries 功能外,然后global $stored_entries; $stored_entries = $this->entries 在shortcode函数中,但它没有任何区别。的内容$this->entries 以及$stored_entriesNULL.

问题主要是:

  • How can I pass the array on to this other function?

    • Why is that array stored between iterations of the shortcode-function but forgotten when we enter the filter-function?

1 个回复
SO网友:Steeven

好吧,结果是我在add_filter 命令线路:

add_filter( \'the_content\', array( &$this, \'after_content\' ));
应为:

add_filter( \'the_content\', array( &$this, \'after_content\' ), 12);
现在一切都好了。可以在filter函数中访问阵列。此数字是一个优先级变量:https://developer.wordpress.org/reference/functions/add_filter/, 但如果有人想对其有用性发表评论,请发表评论。

相关推荐

使用Apply_Filters()的要点

当我试图开发一个插件时,我试图看到其他插件也能完成我的插件将要实现的功能,然后我看到开发人员在大多数功能中使用该功能apply_filters() 我不明白为什么。下面是一个示例:public static function myFunction() { return apply_filters( \'du/class/method\' array( \'index\' => \'value\', \'index\' =&g