【问题标题】:PHP run same function twice for different outputPHP为不同的输出运行相同的函数两次
【发布时间】:2016-08-16 03:38:09
【问题描述】:

在纯理论中,我的问题是是否可以让一个 php 函数运行两次,每次使用不同的变量并将其作为结果返回。

在实践中,我正在修改 WordPress 的子主题(并学习一些 PHP 基础知识)。最初的主题,二十六,具有使用几个参数构造到 Google 字体的链接并输出最终 URL 的功能,然后由其他一些函数获取并插入到带有 HTML 标记的头部模板中 - 链接、href、rel , 输入。

在我的子主题中,我必须完全替换其中一种默认字体,因此我没有重新构建函数,而是将其最小化为仅包含并输出最终字体 URL,如下所示:

if ( ! function_exists( 'twentysixteen_fonts_url' ) ) :
function twentysixteen_fonts_url() {
    $fonts_url = 'https://fonts.googleapis.com/css?family=Merriweather:400,700,900,400italic,700italic,900italic|Inconsolata&subset=latin,latin-ext,cyrillic,greek';
    return $fonts_url;
}
endif;

我现在要做的是在此函数中获取另一个 URL (https://code.cdn.mozilla.net/fonts/fira.css),以便从 Mozilla 的 CDN 和 Google 的 CDN 加载第三种字体。

不能将其放入具有不同名称的单独函数中,因为它的输出不会被头部模板拾取。使用数组将两个 url 放入一个链接 href。

有人可以指点我正确的方向吗?

谢谢。

【问题讨论】:

  • 这对你有用吗? stackoverflow.com/a/27045730
  • @MonkeyZeus - 确实如此,谢谢!至于理论上,是否有可能让一个函数运行两次并产生不同的结果,这些结果会被接收函数正确拾取并相应地复制?
  • 我不确定你的意思。为了让一个函数运行两次,它需要被调用两次。如果您想了解我的意思,那么如果您愿意,我可以发布答案。
  • @MonkeyZeus 我想我明白了。在此示例中,该函数最初旨在将不同的字体名称、粗细和子集组合到一个链接中,然后输出。但是当被另一个函数调用时,它会这样做。因此,如果我希望字体函数运行两次,我需要调用它两次,从调用它的任何位置向它传递不同的参数。我想知道我是否可以强制字体函数运行两次,并使用第二个返回的 URL 使任何使用其输出的函数再次发挥它的魔力。但从你所说的我猜事情必须从调用方完成。
  • @MonkeyZeus 您愿意发布您的解决方案作为答案吗?我宁愿接受你的,也不愿让我重复你说的话。此外,您还回答了我的问题的理论部分,所以我相信您值得称赞。

标签: php wordpress


【解决方案1】:

Twentysixtee juste 使用一种字体,生成的 URL 为twentysixteen_fonts_url ()

如果你查看 Twentysixtee 的 function.php,twentysixteen_fonts_url () 只使用了 2 次。它用于在编辑器(第 144 行)和前端(第 233 行)中包含字体 url。

添加其他字体

如果您想添加其他字体,则需要将其添加到您的子主题中。

您可以通过在 function.php 中添加以下代码来完成此操作

function my_child_theme_font_url() 
{
    $fonts_url = 'https://code.cdn.mozilla.net/fonts/fira.css';
    return $fonts_url;
}


function my_child_theme_enqueue_scripts() 
{
    wp_enqueue_style( 'my_child_font', my_child_theme_font_url(), array(), null );
}
add_action( 'wp_enqueue_scripts', 'my_child_theme_enqueue_scripts' );

【讨论】:

  • 谢谢@jordane 这与@MonkeyZeus 在他的评论中建议的相似。我只是按原样保留了该功能,并像这样分别对 fira.css 进行了排队:add_action( 'wp_enqueue_scripts', 'register_custom_plugin_styles' ); function register_custom_plugin_styles() { wp_register_style( 'fira', 'https://code.cdn.mozilla.net/fonts/fira.css' ); wp_enqueue_style( 'fira' ); }
  • 是的,这是最短的解决方案
  • Twentysixteen 实际上使用了三种字体。我正在修改的功能最初将三者合二为一,链接到 Google,如下所示:pastebin.com/iuT8zxmR
【解决方案2】:

正如@MonkeyZeus 所建议的,在这种情况下,实现将另一个 webfont 加入队列的最简单方法是将第一个函数保持原样,并在其后添加一个不同的函数以将所需的文件加入队列,如下所示:

add_action( 'wp_enqueue_scripts', 'register_custom_plugin_styles' );

function register_custom_plugin_styles() {
    wp_register_style( 'fira', 'https://code.cdn.mozilla.net/fonts/fira.css' );
    wp_enqueue_style( 'fira' );
}

至于我的问题的理论部分,我知道以某种方式强制函数第二次运行并产生不同的输出不会强制使用此输出的另一个函数也第二次运行,从而产生不同的结果.为此,必须修改调用函数,而不是发射函数。

感谢 @MonkeyZeus 和 @Jordane-CURE 的帮助。

【讨论】:

  • 您需要做的是支持并接受下面的答案,因为它清楚地回答了您的问题。你不应该把答案回收到你自己的。回答问题的动力不足,因此提问者可以通过点赞和接受来表达赞赏。
  • 我完全同意你的看法,@David,但我不知道如何在这里继续。我相信 MonkeyZeus 的解决方案更好。此外,他回答了我问题的理论部分。而他首先做到了。他只是在 cmets 中完成了这一切,而不是作为答案。所以我宁愿投票赞成,而不是回答自己。
  • 好吧,您不能接受 cmets 作为答案,但我相信提供的答案与您的要求非常兼容。至于理论部分,我认为它对任何人都没有用......编写函数、更改输入等的方法几乎是无限的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多