在WordPress Post Loop中避免重复的函数名称(WP_Footer脚本)

时间:2012-10-17 21:20:31

标签: php wordpress-plugin wordpress

假设我创建了一个将内容(用作短代码)注入帖子的插件。我正在尝试将每个帖子的代码推送到页面底部。

这样可以正常工作,但是当您使用相同的短代码在多个帖子的存档页面上时,会出现明显的冲突,因为函数名称会重复,并且只会输出一次页脚代码(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');
    ?>

2 个答案:

答案 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');
?>