我在wordpress网站中有一个功能文件,其中包含各种功能,当呈现网站上的页面时,这些功能由其相关的挂钩调用。
一个特定的功能运行良好,但是我现在在该功能的代码中添加了一个与Wordpress插件“ Collapse-O-Matic”有关的简码。呈现页面时,简码会在短括号中显示为简码本身!我想我对如何呈现简码结果有些不了解,想知道是否有人能够向我解释如何正确执行此操作。
简写为[expand title="Open" swaptitle="Close"]Target Content[/expand]
,我将其放在此函数中的位置如下(请注意,这并非函数中的所有代码):
<ul class="admin">
<?php
// loop through rows (sub repeater)
while( have_rows('item_list_details') ): the_row()
// display each item as a list
?>
<?php
$date = new DateTime(get_sub_field('date'));
$now = new DateTime(Date('Y-m-d'));
$diff = $now->diff($date);
if ($diff->days > $latest): //Use $diff->days and not $diff->d
?>
<li class='research'>
<?php else: ?>
<li class='researchLatest'>
<?php endif;?>
<div class='itemTitle'>
<?php $link = get_sub_field('link_url'); if( $link ): ?>
<a href="<?php echo $link['url']; ?>" target="<?php echo $link['target']; ?>" title="<?php echo $link['title']; ?>">
<?php endif; ?>
<?php the_sub_field('link_name'); ?>
<?php $link = get_sub_field('link_url'); if( $link ): ?>
</a>
<?php endif; ?><p class='alert'> - <strong>NEW</strong></p>
</div>
<br/>
<div class="itemDescription">
[expand title="Open" swaptitle="Close"]<?php the_sub_field('link_description'); ?>[/expand]
</div>
</li>
<?php endwhile; ?>
</ul>`
如您所见,在简码(<?php the_sub_field('link_description'); ?>
)中有一个php表达式,但是希望仍然可以正确地进行此渲染。
答案 0 :(得分:1)
您要寻找的功能是do_shortcode()
。
通常,这只是一个问题:
echo do_shortcode('[shortcode]whatever[/shortcode]');
另外,您正在使用ACF中的the_sub_field()
,它直接输出并且不返回任何内容,因此您无法将其结果传递给do_shortcode()
。
您可以改用get_sub_field()
,并捕获输出,然后将所有内容传递给do_shortcode()
。
例如:
$linkDescription = get_sub_field('link_description');
$renderedShortcode = do_shortcode("[expand title="Open" swaptitle="Close"]$linkDescription[/expand]");
echo $renderedShortcode;
如果您需要在使用前检查短码是否存在,则可以使用shortcode_exists()
。
例如
if (shortcode_exists('expand')) {
echo do_shortcode("[expand title="Open" swaptitle="Close"]$linkDescription[/expand]");
}
else {
echo $linkDescription;
}
文档:
答案 1 :(得分:0)
在代码中,您必须使用wordpress函数do_shortcode($ string)
<?php echo do_shortcode("[expand title=\"Open\" swaptitle=\"Close\"]".get_sub_field('link_description')."[/expand]") ?>
您实际上可以将混合有html和shortcodes的整个块传递到此函数中,它将返回一个字符串,其中所有内容均已呈现。
这显然也有效
$output=do_shortcode("[expand title=\"Open\" swaptitle=\"Close\"]".get_sub_field('link_description')."[/expand]");
编辑:根据yivi的输入修复了get_sub_field