0

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

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

2 回答 2

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>

尚未对此进行任何测试,但我觉得它会起作用。

于 2012-10-18T00:55:11.717 回答
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');
?>
于 2012-10-17T21:58:07.530 回答