我有一个快捷码,它遍历自定义帖子类型的列表,并在显示它们时创建一个块。在HTML5中,在标题外有样式块是非法的(可能在其他版本中也是如此,但我们使用的是HTML5)。
我正在寻找一种方法,使我的短代码可以将其块插入头部。有什么建议吗?
这是页面:http://2011.solarteam.org/sponsors/gift-recognition/view-of-living-room
在一个页面上调用两次短代码<像这样一次[interactive slug=\'sponsor-map-living-room\' show="image"]Select an item to learn more about its sponsor.[/interactive]
制作图像<像这样一次[interactive slug=\'sponsor-map-living-room\' show=\'list\' headertitle=\'WaterShed Featured Sponsors: Living Room\' /]
将列表列在底部。
我无法将其放入模板中,因为模板不知道是哪个slug
转到哪一页。
以下是简化版的短代码处理代码:
<ul><?
foreach($map->points as $point){
$result = "";
if(!in_array($point->pointer_type, $all_styles[\'regular\'])){
$all_styles[\'regular\'][$point->pointer_type] = "
.pointer_style_" . $point->pointer_type . " {
width: " . $point->pointer_width(). "px;
height: " . $point->pointer_height(). "px;
background: transparent url(\'/images/interactive/pointers/" . $point->pointer_URL() . "\');
}
";
}
ob_start(); ?>
<li class="tag_point sponsor_data_point pointer_style_<?php echo $point->pointer_type?>" id="point_<?php echo $point->ID ?>" data-in="#point_<?php echo $point->ID ?>_info" data-hover-style="pointer_s_style_<?php echo $point->selected_pointer_type?>" style="left:<?php echo $point->x - ($point->pointer_width()/2) ?>px;top:<?php echo $point->y - ($point->pointer_height()/2)?>px;">
<div class="tag_info" id="point_<?php echo $point->ID ?>_info">
<div class="donation-title"><?php echo $point->contribution ?></div>
<div class="donation-contribution"><?php echo $point->description ?></div>
</div>
<?
$result .= ob_get_clean();
$result .= "</li>\\n";
echo $result;
}
?>
</ul>
<style type="text/css">
<?php echo join("\\n", $all_styles[\'regular\']); ?>
</style>
The
<style>
HTML5中不允许使用标记,所以我想把它放在页面的头部。
最合适的回答,由SO网友:Milo 整理而成
钩the_posts
并检查每个帖子,看看你的短代码是否存在,你可以使用wp_enqueue_style
如果是的话。也许用一点正则表达式来检查是否存在短代码才是最好的方法,不幸的是我对正则表达式不是很好!
function wpse27772_has_shortcode($posts) {
if ( empty($posts) )
return $posts;
$has_shortcode = false;
foreach ($posts as $post) {
//check for your shortcode in $post->post_content
//set $has_shortcode = true if it\'s found
}
if($has_shortcode === true):
wp_enqueue_style( \'mystyle\', get_template_directory_uri().\'/mystyle.css\' );
endif;
return $posts;
}
add_action(\'the_posts\', \'wpse27772_has_shortcode\');
编辑-下面我的评论中的快速示例。。。
function wpse27772_output_styles(){
global $posts;
foreach ($posts as $post) {
// inspect $post->post_content;
// echo "<style type=\'text/css\'></style>";
}
}
add_action(\'wp_head\', \'wpse27772_output_styles\');
SO网友:Dominic P
我意识到这是一个老问题,但我最近需要这样做。我的解决办法是wp_head
并在帖子内容中运行任何短代码。这很有效,因为我处理通话的短码wp_enqueue_script
和wp_enqueue_style
当它们被处理时。
代码如下所示:
function example_shortcodes() {
global $posts;
foreach ( $posts as $my_post ) {
ob_start(); // just in case
do_shortcode( $my_post->post_content );
ob_end_clean();
}
}
add_action( \'wp_head\', \'example_shortcodes\', 5 );
性能是一个问题,因为这意味着您要运行两次短代码,如果一个短代码在运行时“做”了什么,可能会产生意外的副作用。有鉴于此,只处理您知道不会成为此技术问题的特定短代码可能是明智的。