在Foreach循环中创建短码(使用数组)

时间:2021-02-07 作者:katiedev

我有一个自定义主题,其中包括几个模板部分。我打算在主题文件中使用主题模板部分,并将它们用作短代码。

为了创建短代码,我目前正在将每个模板部分包装在其自己的短代码函数中。示例:

function foo_shortcode() { 
  ob_start(); 
  require_once( get_stylesheet_directory() . \'/template-parts/foo.php\');
  return ob_get_clean();
} add_shortcode(\'foo\', \'foo_shortcode\');
是否可以使用foreach 基于短代码名数组的循环?所有模板零件都存储在同一文件夹中。

我的当前代码出现错误Parse error: syntax error, unexpected \'$function_name\' (T_VARIABLE), expecting \'(\'

当前代码:

$shortcodes = array(
  \'foo\',
  \'bar\',
  \'lorem\',
  \'ipsum\',
  \'dolah\'
);

foreach ($shortcodes as $shortcode) {

  $filepath       = get_stylesheet_directory() . \'/template-parts/\' . $shortcode . \'.php\';
  $function_name  = $shortcode . "_function";

  function $function_name () {
    ob_start(); 
    require_once($filepath);
    return ob_get_clean();
  } add_shortcode($shortcode, $function_name);
}

1 个回复
SO网友:katiedev

使用$shortcode var作为函数名解决了动态函数名问题

foreach ($shortcodes as $shortcode) {

  add_shortcode($shortcode, function ($atts) use ($shortcode) {

    $filepath = str_replace(\'_\', \'-\', $shortcode);

    ob_start(); 
    require_once(get_stylesheet_directory() . \'/template-parts/\' . $filepath . \'.php\');
    return ob_get_clean();
  });
}

相关推荐

在Theme-editor.php中如何添加创建文件的方法

这是我目标的一个概念我想通过在文本字段中输入完整的文件名和扩展名,在当前打开的目录中创建文件,单击创建并使用AJAX进程运行file_put_contents() 方法我还没有尝试过任何编码方法,因为我甚至没有一个起点。经过18个小时的研究,我只找到了使用add_theme_page() 添加一个可以进行所有自定义编码的页面。虽然这是一个可靠的选项,但我希望将其全部保存在核心文件编辑器中。创建一个完整的文件编辑器,它可以完成与核心相同的任务,唯一的区别是一个文本字段,这简直是小题大做。在绝望中,我使用了a