ADD_FILTER函数连接字符串和LOCATE_TEMPLATE函数

时间:2019-03-10 作者:lharby

我正在尝试将一个小php组件注入到我的主站点导航的末尾。

我编写了此筛选器:

add_filter(\'wp_nav_menu_items\', \'add_css_switcher\', 10, 2);
function add_css_switcher($items, $args){
    $items .= \'<li class="css-toggler hidden">\' . locate_template(\'inc/css-switcher.php\', true, true) . \'</li>\';
    return $items;
}
目前,它输出locate_template 中的文件url<li> 要素

如何通过concatenator在php中解析?如果可能的话,我试着用php标签包装组件,但没有成功。

TIA公司

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

连接字符串时运行输出在PHP中不起作用。如果您尝试以下操作:

function goes() {
    echo \'goes\';
}

$string = \'My string \' . goes() . \'here\';

echo $string;
那么输出将是:

goesMy字符串在这里

同样的事情也适用于includerequire 当包含的文件生成输出时。

如果要将PHP文件的输出连接到字符串中,则需要include 它使用输出缓冲捕获输出。如果文件位于主题中,则应将其包含在get_template_part(), 而不是locate_template().

add_filter(\'wp_nav_menu_items\', \'add_css_switcher\', 10, 2);
function add_css_switcher($items, $args){
    ob_start();

    get_template_part( \'inc/css-switcher\' );

    $css_switcher = ob_get_clean();

    $items .= \'<li class="css-toggler hidden">\' . $css_switcher . \'</li>\';

    return $items;
}
但这确实是一种愚蠢的做法。如果要返回一个要连接到字符串中的值,那么模板文件并不是一种明智的方法。您应该将css-switcher.php 并将其更改为返回其输出,而不是回显它。然后可以在代码中使用该函数:

function css_switcher() {
    // Return menu item code here.
}

add_filter(\'wp_nav_menu_items\', \'add_css_switcher\', 10, 2);
function add_css_switcher($items, $args){    
    $items .= \'<li class="css-toggler hidden">\' . css_switcher() . \'</li>\';

    return $items;
}