假设我创建了一个将内容(用作短代码)注入帖子的插件。我正在尝试将每个帖子的代码推送到页面底部。
这样可以正常工作,但是当您使用相同的短代码在多个帖子的存档页面上时,会出现明显的冲突,因为函数名称会重复,并且只会输出一次页脚代码(activate_flex_slider)。
<?php
function your_function() {
echo '<p>This is inserted at the bottom</p>';
}
add_action('wp_footer', 'your_function');
?>
我要做的是输出页脚脚本,以便有多个jQuery实例指向它们各自的ID ...
<?php
function flex_slider() {
$output ='<ul class="flexslider"><li>Slide Content</li></ul>';
return $output;
}
function activate_flex_slider(){
?>
<script>
( function ($) {
$(window).load(function(){
//different number will be prepended to ID (matches post ID #)
$('#carousel-<?php echo $post->ID ?>').flexslider();
});
})(jQuery);
</script>
<?php
}
// Hook into footer so slider becomes active after page loads
add_action('wp_footer','activate_flex_slider');
// Create the Shortcode
add_shortcode('flex_slider', 'flex_slider');
?>
答案 0 :(得分:1)
所以这里的整个问题是导致我连续的钩子排队。如果我们编译了所有的帖子ID并包含你自己的javascript处理程序来填充页面加载的flex_slider实例,该怎么办?只有在页面是存档页面时才让队列入队。如果你让所有的旋转木马容器都有一个独特的类,那么你可以做这样的事情。
将它放在你的页面模板或页脚或标题中,在哪里(当然用你自己的东西填写通用的东西)并不重要:
<?php if (is_archive()) wp_enqueue_script('special_sauce', '/js/special_sauce_location.js', 'jquery_handle'); ?>
这适用于你的special_sauce脚本。
<script>
( function ($) {
$('document').ready(function () {
$('.carousel_container').each( function(i,obj) {
obj.flexslider();
});
});
})(jQuery);
</script>
没有测试过这个,但我觉得它会起作用。
答案 1 :(得分:0)
显然最好不要在循环中使用你的函数声明,但如果你不能,那么这应该有用......
<?php
if(function_exists('your_function') == false) {
function your_function() {
echo '<p>This is inserted at the bottom</p>';
}
}
add_action('wp_footer', 'your_function');
?>