2012-10-17 2 views
0

게시물에 짧은 코드로 사용되는 내용을 삽입하는 플러그인을 만들었습니다. 각 게시물의 해당 코드를 페이지의 맨 아래로 밀어 넣으려고합니다.WordPress 포스트 루프 (WP_Footer 스크립트)에서 중복 함수 이름 피하기

동일한 짧은 코드를 사용하는 여러 게시물이있는 아카이브 페이지에있는 경우 함수 이름이 중복되어 한 번만 푸터 코드 (activate_flex_slider) 만 출력되므로 명백한 충돌이 있습니다. 해당 ID의를 가리키는 여러 jQuery를 인스턴스가되도록

<?php 
function your_function() { 
    echo '<p>This is inserted at the bottom</p>'; 
} 
add_action('wp_footer', 'your_function'); 
?> 

는 난 할 노력하고있어

분명히
<?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

짧은 코드의 내용을 페이지의 기본 부분에 삽입해야하는 이유에 대한 전체 그림이 실제로 없지만 PHP 해커가 아닌 창의적인 CSS로 해결할 수있는 것처럼 보입니다. –

+0

나는 원본이 충분히 명확하지 않다고 생각하여 좀 더 구체적으로 내 게시물을 편집했습니다. – Joe

+0

내 의견을 아래의 게시물로 바꿨습니다. –

답변

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

여기에서 전체 문제는 연속 후크 대기열을 발생시킵니다. 우리가 모든 게시물 ID를 컴파일하고 페이지로드시 flex_slider 인스턴스를 처리하기 위해 자체 JavaScript 처리기를 포함하면 어떻게 될까요? 페이지가 아카이브 페이지 인 경우에만 스크립트 대기열에 넣기 만하면됩니다. 모든 회전식 컨테이너에 고유 한 클래스가 있으면이 같은 작업을 수행 할 수 있습니다. 이 페이지 템플릿이나 바닥 글 또는 헤더에, 그것은 정말 문제 (물론 자신과 일반적인 것들에 입력) 않습니다

을 넣어 : 당신의 special_sauce 스크립트

<?php if (is_archive()) wp_enqueue_script('special_sauce', '/js/special_sauce_location.js', 'jquery_handle'); ?> 

그리고이.

<script> 
(function ($) { 
$('document').ready(function() { 
$('.carousel_container').each(function(i,obj) { 
    obj.flexslider(); 
}); 
}); 
})(jQuery); 
</script> 

테스트를 해본 적은 없지만 효과가 있다고 느낍니다.