我想在我的自定义Wordpress主题中显示一个联系人小工具,所以我把它放在一个短代码中,这样我就可以随时随地调用它。问题是,短码显示在我放置短码的原始代码之上。这发生在小部件、普通文本字段等中。
首先,我添加了add_filter( 'widget_text', 'do_shortcode' );行,以启用显示快捷代码的字段。
在我的functions.php中,我将下面的代码放在了调用带有联系信息的模板部件的位置。我看到了另一个话题,他们通过return一个变量解决了这个问题。
// contact widget
function contact_info_shortcode() {
$contact = get_template_part('includes/sections/contact', 'info');
return $contact;
}
add_shortcode('contact_info', 'contact_info_shortcode'); 在代码中,我调用了以下模板文件,它显示了我联系信息
<?php
$contact_title = get_field('contact-titel', 'option');
$phone = get_field('telefoon', 'option');
$email = get_field('e-mail', 'option');
$adress = get_field('adres', 'option');
$place = get_field('plaats', 'option');
;?><table class="contact-table">
<!-- telefoon -->
<tr>
<td><i class="fas fa-phone"></i></td>
<td><a class="contact-info-link" href="<?php echo $phone['url'];?>" target="<?php echo $phone['target'];?>"><?php echo $phone['title'];?></a></td>
</tr>
<!-- email -->
<tr>
<td><i class="fas fa-envelope"></i></td>
<td><a class="contact-info-link" href="<?php echo $email['url'];?>" target="<?php echo $email['target'];?>"><?php echo $email['title'];?></a></td>
</tr>
<!-- adres -->
<tr>
<td><i class="fas fa-map-marker-alt"></i></td>
<td>
<p class="contact-info-adress"><?php echo $adress;?></p>
<p class="contact-info-adress"><?php echo $place;?></p>
</td>
</tr>
</table>希望你们知道我做错了什么
发布于 2021-02-07 00:36:16
这是因为include实际上只是一个包含的包装器,它本质上是echoing模板部分,所以您不能将其赋给变量。
您需要做的是将模板部分保存在output buffer中,然后返回输出缓冲区。
function contact_info_shortcode() {
// Here we start the output buffer.
ob_start();
// This is now held in the output buffer.
get_template_part('includes/sections/contact', 'info');
// Now we can return the data in the output buffer.
return ob_get_clean();
}
add_shortcode('contact_info', 'contact_info_shortcode');https://stackoverflow.com/questions/66078946
复制相似问题