jQuery UI Accordion仅适用于第一篇文章:WordPress自定义帖子类型

时间:2014-03-29 02:27:36

标签: jquery wordpress accordion

手风琴仅适用于首发......

我知道已经发布了类似的问题,在阅读了所有这些问题之后,我似乎无法弄清楚为什么我的工作不起作用。

我在functions.php中排队脚本,如下所示:

function my_scripts_method() {
    if ( !is_admin() ) {
        wp_enqueue_script('jquery-ui-accordion');
        wp_enqueue_script(
            'custom-accordion',
        get_template_directory_uri() . '/js/accordion.js',
        array('jquery')
    );
    }
}
add_action('wp_enqueue_scripts', 'my_scripts_method');

.js文件是这样的:

jQuery(document).ready(function($) {
    $( "#accordion" ).accordion({
        collapsible: true, 
                active: false
    });
});

自定义帖子类型循环如下:

<?php while ( have_posts() ) : the_post(); ?>

<div id="accordion"> 

    <h3><?php the_title(); ?></h3> 

    <div>
    <?php the_content(); ?>
    </div>

</div> <!--#accordion-->

<?php endwhile; ?>

手风琴只适用于第一个帖子......

任何想法为什么?

有问题的网址:premierdev1(点)hcg(点)bz / prm_faq /

2 个答案:

答案 0 :(得分:0)

您可以在Firefox中使用Firebug等工具。

通过启用Firebug查看您的网站,查看“控制台”标签,我可以看到导致错误的原因是由于错误:

TypeError: $ is not a function

var icons = $( ".selector" ).accordion( "option", "icons" );

该代码位于您的脚本文件中:

http://premierdev1.hcg.bz/wp-content/themes/premier-reverse/js/accordion.js?ver=3.8.1

问题是你不能在WordPress中使用jQuery的$函数,你必须使用jQuery - 除非你在文档就绪函数中这样构造:

jQuery(function($) {
    // Do stuff in here, can use $ if you like
});

因此,为了纠正这个问题,我建议将该文件更改为:

jQuery(document).ready(function($) {
    $( "#accordion" ).accordion({
        collapsible: true,
        active: false
    });
    /* Move the below lines into your document ready */
    // getter
    var icons = $( ".selector" ).accordion( "option", "icons" );
    // setter
    $( ".selector" ).accordion( "option", "icons", { "header": "ui-icon-plus", "activeHeader": "ui-icon-minus" } ); 

});

答案 1 :(得分:0)

简单修复:

将手风琴div放在循环外面。像魅力一样工作!

<div id="accordion"> 

        <?php while ( have_posts() ) : the_post(); ?>

                <h3><a href="#"><?php the_title(); ?></a></h3> 

                <div>
                    <p><?php the_content(); ?></p>
                </div>

        <?php endwhile; ?>

</div> <!--#accordion-->