外部文件中的快捷码问题

时间:2014-02-27 作者:user1680906

我有一篇简单的帖子,上面有一个简短的代码:

[xx]http://harrix.org/1.txt[xx]
以及一个外部文件,其内容包含WordPress短代码:

[strong] g[/strong]
我尝试添加自己的标记以加载外部文件:

<?
add_filter(\'the_content\', \'WorkWithTags\');
function WorkWithTags($content){
$Tag ="xx";

if (preg_match_all(\'~\\[\'.$Tag.\'\\](.*?)\\[/\'.$Tag.\'\\]~is\', $content, $arr)) 
{ 
   foreach ($arr[1] as $value) 
   {
      $newvalue = @file_get_contents($value);//Main String

      $content=str_replace($value, $newvalue, $content);
   }

   //Delete tags
   $tr=array(\'[\'.$Tag.\']\'=>\'\',\'[/\'.$Tag.\']\'=>\'\',); 
   $content=strtr($content,$tr);
}
return $content;
}
?>
添加文件效果良好。但是外部文件包含WordPress的短代码。如何让WordPress执行此外部文件中的所有短代码?

Update.

我尝试使用s\\u ha\\u dum的代码functions.php:

function WorkWithTags($atts,$content){
  $atts = shortcode_atts(
    array(
      \'tag\' => \'xx\'
    ),
    $atts
  );
  $fo = $atts[\'tag\'];
  $content = file_get_contents($fo);//Main String
  return do_shortcode($content);
}
add_shortcode(\'wwt\',\'WorkWithTags\');
enter image description here

然后我在帖子中添加了这个短代码:

Text. Text. Text. Text. Text. Text. Text. Text. 

[wwt tag="http://harrix.org/1.txt" /]

Text. Text. Text. Text. Text. Text. Text. Text.
enter image description here

我在帖子预览中看到:

enter image description here

我无法在外部文件中运行短代码。

2 个回复
SO网友:s_ha_dum

我觉得你做的事情太复杂了。核心短代码系统应该能够处理这个问题。我想你正在寻找这样的东西:

function WorkWithTags($atts,$content){
  $atts = shortcode_atts(
    array(
      \'tag\' => \'xx\'
    ),
    $atts
  );
  $fo = get_template_directory().\'/\'.$atts[\'tag\'];
  $content = file_get_contents($fo);//Main String
  return do_shortcode($content);
}
add_shortcode(\'wwt\',\'WorkWithTags\');

// test it
echo do_shortcode(\'content with a shortcode: [wwt tag="codesnippet.php" /]\');
The[wwt tag="xx" /] 短代码将包括文件xx 并运行do_shortcode 在目录上。我想这就是你所说的“让Wordpress执行这个外部文件中的所有标记”。

请注意,该代码从wp-content/your-theme WordPress安装目录。如果您试图通过URL加载资源,请执行以下操作:

$fo = get_template_directory().\'/\'.$atts[\'tag\'];
。。。需要。。。

$fo = $atts[\'tag\'];
。。。尽管我承认这对我来说没有多大意义,因为您正在尝试解析该文件中的短代码。

SO网友:fischi

短代码和标记首先,请记住您对tags 实际上是一个短代码。

标记用于向内容中添加元信息,而短代码用于添加功能,通常从内容内部调用。

正如@s\\u ha\\u dum所指出的,对于您的问题,您应该实现WorkWithTags-作为一个短代码,所以您不必在内容中添加额外的过滤器来搜索您的短代码。

为了让它像您实现的那样工作,您有@s\\u ha\\u dum的方法,或者您可以像这样修改您的短代码和函数:

[xx]http://harrix.org/1.txt[/xx] //note that the second xx closes with the / before the shortcode-identifier.
接下来,将此函数添加为短代码。

请记住,已打开一个筛选器the_content 寻找所有的短代码,因此您不必自己实现它

function WorkWithTags( $atts, $content ){
    $yourfile = esc_url( $content ); // clean the input
    $contents = file_get_contents( $yourfile ); // get the file
    return do_shortcode( $contents ); // search the content of your file for all registered shortcodes
}
add_shortcode(\'xx\',\'WorkWithTags\');
这将很好地为您做好准备,尽管更好的方法是实现您的短代码,如[xx url="yoururl" /]. 在这种情况下,url将不在$content 函数的WorkWithTags, 但是在$atts.

所有注册的短代码将在的内容上执行$yourfile. 如果没有,请确保已注册。

最后一件事,if you use an external file to be included and "executed", make sure that you do not call an infinite look by placing another [xx] shortcode in your external file.

结束

相关推荐

Youtube shortcode

我正在努力使这个短代码起作用,但没有任何成功。所有的尝试都给了我一个白色的方块。 function youtube($atts) { extract(shortcode_atts(array( \"value\" => \'https://www.youtube.com/watch?v=EhWopzlRwZ8\', \"width\" => \'475\', \"height\" => \'350\', \