【问题标题】:Using a function as Callback of another one declared with namespaces使用一个函数作为另一个用命名空间声明的函数的回调
【发布时间】:2015-12-01 02:01:38
【问题描述】:

我正在使用 WordPress Sage Starter 主题 (https://roots.io/sage/)。它使用命名空间来声明函数。

我的 lib/extras.php 文件中有一个函数 (my_function_cmets) 用于修改 cmets 标记。这个文件有这个命名空间:命名空间Roots\Sage\Extras; 现在我需要将该函数用作另一个文件 templates/cmets.php 中的回调,如下所示:

<?php wp_list_comments(array('style' => 'ol', 
                          'short_ping' => true,
                          'avatar_size' => 60,
                          'type' => 'comment',
                          'callback' => 'my_function_comments',
                          )); ?>

当然,my_function_cmets 不在此文件中,所以我编写了对 wp_list_cmets 的调用,如下所示:

<?php use Roots\Sage\Extras; ?>
<?php wp_list_comments(array('style' => 'ol', 
                          'short_ping' => true,
                          'avatar_size' => 60,
                          'type' => 'comment',
                          'callback' => 'Extras\my_function_comments',
                          )); ?>

好的,这个回调函数显然是错误的,但我不知道如何编写它才能正确调用它。

也许有人可以帮我解决这个问题。

谢谢!

附言。命名空间相关文档可在此处找到(命名空间部分):https://roots.io/upping-php-requirements-in-your-wordpress-themes-and-plugins/。也许这将有助于回答我的问题。

【问题讨论】:

  • 函数与命名空间声明无关,只有类(及其方法)。如果你 included 函数所在的文件,并且如果它在全局范围内,那么它是可访问的。但如果它是一个方法,那么您应该看到它的可访问性属性(如果是静态的,则为 Extras\Class::my_function_comments。如果不是,则为 Extras\Class-&gt;my_function_comments
  • 在回调中使用完整的命名空间(在字符串内部)。当 wordpress 执行回调时需要命名空间,而不是在声明它时。您可以省略带有“使用”的行。
  • 谢谢你们!!我会尝试发布解决方案。谢谢!
  • 该函数不在类中,而是在具有命名空间的文件中。 @WeSee 选项解决了我的问题。我会发布一个解决方案让大家知道。

标签: php wordpress


【解决方案1】:

正如@Wesee 在 cmets 中所说,将函数用作回调的方法是将整个路径放入函数。所以我删除了这一行:

<?php use Roots\Sage\Extras; ?>

并使用它来调用 wp_list_cmets:

<?php wp_list_comments(array('style' => 'ol', 
                      'short_ping' => true,
                      'avatar_size' => 60,
                      'type' => 'comment',
                      'callback' => 'Roots\Sage\Extras\my_function_comments',
                      )); ?>

谢谢你们!

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多