使用JQuery插件单击按钮即可打开JQuery模式窗口

时间:2019-04-01 作者:festgebaeck

我试图单击按钮打开Jquery模式窗口。并将此按钮插入插件内容模板(WP SHow posts)。我用的是jquerymodal。com的模式代码,因为我不需要太多过多的功能。但到目前为止,它还不起作用。

我通过googleapis将jquery和jQueryModel插件包含在我的主题函数中。像这样的php文件,只想在特定页面上使用它:

if (!is_admin()) {
wp_deregister_script(\'jquery\');
wp_register_script(\'jquery\', \'https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js\', \'jquery\', \'3.1.1\', true);
wp_enqueue_script(\'jquery\');
}

function load_javascript_file() {
    wp_register_script(\'modal\', get_template_directory_uri() . \'/js/jquery.modal.min.js\', \'jquery\', \'\', true);
}
add_action( \'init\', \'load_javascript_file\' );

function conditionally_load_javascript_file() {
    if ( is_page( \'kundenprofile\' ) ) {
      wp_enqueue_script(\'modal\');
    }
}
add_action(\'wp_enqueue_scripts\', \'conditionally_load_javascript_file\' );
并像这样在主题函数中添加了jQueryModel css。php:

function wpse39139_register_more_stylesheets() {
    wp_register_style( \'modal\', get_template_directory_uri() . \'/jquery.modal.min.css\' );
}
add_action( \'init\', \'wpse39139_register_more_stylesheets\' );

function wpse39139_conditionally_enqueue_my_stylesheet() {
    // only enqueue on product-services page slug
    if ( is_page( \'kundenprofile\' ) ) {
        wp_enqueue_style( \'modal\' );
    }
}
add_action( \'wp_enqueue_scripts\', \'wpse39139_conditionally_enqueue_my_stylesheet\' );
然后,我将模式内容添加到插件模板文件中(请参见标题中的第一个div),我想在其中使用它。这是我尝试插入模态div的完整部分:

<header class="wp-show-posts-entry-header">


    <div id="ex1" class="modal">
        <p>Thanks for clicking. That felt good.</p>
            <a href="#" rel="modal:close">Close</a>
    </div>



    <div class="entry-header-wrap">
        <?php

        do_action( \'wpsp_before_title\', $settings );
        echo wp_show_posts_profile_picture();
        echo \'<div class="profile-head"\' . $settings[ \'inner_wrapper_style\' ] . \'>\';
        $before_title = sprintf(
        \'<%1$s class="wp-show-posts-entry-title" itemprop="headline"><a href="%2$s" rel="bookmark">\',
            $settings[ \'title_element\' ],
            esc_url( get_permalink() )
        );

        $after_title = \'</a></\' . $settings[ \'title_element\' ] . \'>\';

        if ( apply_filters( \'wpsp_disable_title_link\', false, $settings ) ) {
        $before_title = \'<\' . $settings[ \'title_element\' ] . \' class="wp-show-posts-entry-title" itemprop="headline">\';
        $after_title = \'</\' . $settings[ \'title_element\' ] . \'>\';
        }

        if ( $settings[ \'include_title\' ] ) {
        the_title( $before_title, $after_title );
        }

        do_action( \'wpsp_after_title\', $settings );

        echo wp_show_posts_standort();

        ?>
        </div>
            </header><!-- .entry-header -->
之后,我添加了链接,以在另一节中打开下面的实际模态内容(请参见打开模态链接):

if ( \'excerpt\' == $settings[ \'content_type\' ] && $settings[ \'excerpt_length\' ] && ! $more_tag && \'none\' !== $settings[ \'content_type\' ] ) : ?>
    <div class="wp-show-posts-entry-summary" itemprop="text">
    <div class="profilinhalt">
    <?php echo wp_show_posts_merkmal(); ?>

    <p><a href="#ex1" rel="modal:open">Open Modal</a></p>

        <?php wpsp_excerpt( $settings[ \'excerpt_length\' ] ); ?>
    </div><!-- .entry-summary -->
<?php elseif ( ( \'full\' == $settings[ \'content_type\' ] || $more_tag ) && \'none\' !== $settings[ \'content_type\' ] ) : ?>
    <div class="wp-show-posts-entry-content" itemprop="text">
        <?php the_content( false, false ); ?>
        </div>

    </div>
我现在面临的问题是,它不起作用。css加载。就我所知,jquery文件也是如此,但我测试了又测试,似乎遗漏了一些我无法识别的简单错误。我在这里寻找输入,以找到拼图中缺失的部分。也许Wordpress需要一些特殊的输入来加载文件,我不确定了。

我很感激能得到的任何帮助或指点。

1 个回复
最合适的回答,由SO网友:sMyles 整理而成

首先,确保javascript文件加载正确。在页面上打开开发人员工具(您可以右键单击并选择Inspect)。

Elements 选项卡上,搜索javascript文件,以确保它们在页面上排队。

同时检查Console 选项卡以查找任何javascript错误。

您退出jQuery并将自己的版本加入队列有什么具体原因吗?WordPress附带了jQuery,您只需将其作为依赖项添加到脚本文件中即可。

此外,您的注册代码需要更改一些内容:

您可以在wp_enqueue_scripts 前端挂钩(admin_enqueue_scripts 用于后端)指定依赖项时,应养成在数组中指定依赖项的习惯,我建议对脚本/样式名称使用唯一的slug,如下所示modal 可能被其他插件/主题注册,并可能导致问题(我改为mymodal)

function my_custom_enqueue_scripts() {

    wp_deregister_script( \'jquery\' );
    wp_register_script( \'jquery\', \'https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js\', array(), \'3.1.1\', true );
    wp_register_script( \'mymodal\', get_template_directory_uri() . \'/js/jquery.modal.min.js\', array( \'jquery\' ), \'\', true );
    wp_register_style( \'mymodal\', get_template_directory_uri() . \'/jquery.modal.min.css\' );
    if ( is_page( \'kundenprofile\' ) ) {
        wp_enqueue_script( \'mymodal\' );
        wp_enqueue_style( \'mymodal\' );
    }
}

add_action( \'wp_enqueue_scripts\', \'my_custom_enqueue_scripts\' );
您还可以在调用挂钩时更改优先级,方法是将其添加到函数之后:

add_action( \'wp_enqueue_scripts\', \'my_custom_enqueue_scripts\', 1 );
10 未指定时为默认值

我还建议JUST FOR TESTING 要删除支票,请使用is_page 让它在每个页面上排队,如果你这样做了,它会工作,但当你把代码放回原处时,它不会。。。您知道,问题在于该函数检查页面(虽然在将脚本排入队列之前检查页面始终是良好的开发实践……我希望所有开发人员都这样做,但他们没有这样做)

相关推荐

将本地jQuery替换为外部托管时出现WordPress错误

我试图从CDN加载jquery,而不是用wordpress本机加载。在我的功能中。php我已经完成了如下操作,确保它只发生在前端:function replace_jquery() { if (!is_admin()) { wp_deregister_script(\'jquery\'); wp_register_script(\'jquery2\', \'https://ajax.googleapis.com/ajax/libs/jquer