我有一篇简单的帖子,上面有一个简短的代码:
[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\');
然后我在帖子中添加了这个短代码:
Text. Text. Text. Text. Text. Text. Text. Text.
[wwt tag="http://harrix.org/1.txt" /]
Text. Text. Text. Text. Text. Text. Text. Text.
我在帖子预览中看到:
我无法在外部文件中运行短代码。
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.