Применение плагина Wookmark tile к теме WordPress с использованием цикла posts

#javascript #php #jquery #css #wordpress

#javascript #php #jquery #css #wordpress

Вопрос:

Я пытаюсь применить плагин Wookmark jQuery к моей теме WordPress. Реализация происходит с помощью цикла, поскольку суть предмета заключается в создании визуально приятного портфолио. Для темы я зарегистрировал новый тип сообщений типа «портфолио» и создал цикл, который различает сообщения с картинками и без.

Проблема, конечно, в том, что он не работает. Ошибок возврата нет, все скрипты на месте [или мне так кажется] — но сообщения не получают никакой обработки [jQuery Voodoo], которую должен применять WookMark. Все, что я получаю, это все сообщения, вызываемые по порядку.

Я поместил скрипты в свою тему в очередь с помощью functions.php файл таким образом:

 if ( !function_exists('core_mods') ) {
function core_mods() {
        wp_enqueue_script('jquery-custom', get_template_directory_uri().'/assets/wookmark/libs/jquery.min.js' );
        wp_enqueue_script('wookmark', get_template_directory_uri().'/assets/wookmark/jquery.wookmark.js', array('jquery-custom'), false, false);
    }           
}

add_action( 'wp_enqueue_scripts', 'core_mods' );
  

И фактический HTML-код page-portfolio.php заключается в следующем:

 <?php get_header(); ?>


<?php query_posts('post_type=portfolio') ?>
<?php if (have_posts()) : ?>
<script type="text/javascript">
    (function($) {
            $('.masonry-object').wookmark({
                  align: 'center',
                  autoResize: false,
                  comparator: null,
                  container: $('#masonry-container'),
                  direction: undefined,
                  ignoreInactiveItems: true,
                  itemWidth: 0,
                  fillEmptySpace: false,
                  flexibleWidth: 0,
                  offset: 2,
                  onLayoutChanged: undefined,
                  outerOffset: 0,
                  possibleFilters: [],
                  resizeDelay: 50,
                  verticalOffset: undefined
            });
})(jQuery);
</script>
    <div id="masonry-container">
                <?php /* The loop */ ?>
                <?php while ( have_posts() ) : the_post(); ?>
                    <div class="masonry-object" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                            <?php if ( has_post_thumbnail() ) : ?>
                                <div class="masonry-thumbnail">
                                    <a href="<?php the_permalink(' ') ?>" title="<?php the_title(); ?>">
                                        <?php the_post_thumbnail('masonry-thumb'); ?>
                                    </a>
                                    <div class="masonry-title">
                                        <?php echo the_title(); ?>
                                    </div>
                                </div><!--.masonry-thumbnail-->
                            <?php elseif ( !has_post_thumbnail() ): ?>
                                <div class="masonry-details">
                                    <h5>
                                        <a href="<?php the_permalink(' ') ?>" title="<?php the_title(); ?>">
                                            <span class="masonry-post-title">
                                                <?php the_title(); ?>
                                            </span>
                                        </a>
                                    </h5>
                                    <div class="masonry-post-excerpt">
                                        <?php the_excerpt(); ?>
                                    </div><!--.masonry-post-excerpt-->
                                </div><!--/.masonry-entry-details -->  
                            <?php endif; ?>
                    </div>
                <?php endwhile;?>
    </div> <!-- End .masonry-container -->  

<?php endif; ?>
<?php get_footer(); ?>
  

CSS, прикрепленный к теме, является таким:

 #masonry-container {
}
.post-area {
    background: #ffffff ;
    padding: 10px ;
}
.masonry-thumbnail {
}
.masonry-thumbnail img {
    max-width: 100%;
    height:auto;
}
.masonry-title {
    position: absolute;
    width: auto;
    background-color: #ef9430;
    color: #ffffff;
    padding: 5px;
    bottom: 0px ;
    right: 0px;
}
.masonry-details {
    padding: 10px;
    background-color: #ffffff;
}
.masonry-object {
    width: 25% ;
    transition: all 1s ease;
}
.masonry-object:hover {
    z-index: 2;
    box-shadow: 0 0 20px #ffffff;
    transition: all 1s ease;
}
  

Комментарии:

1. В чем вопрос?

2. Проблема в том, что он не работает. Но спасибо, что помогли мне прояснить это.

Ответ №1:

(function($) {...})(jQuery); это не то же самое, что $(function() {...});

Первый будет выполнен, как только он будет обнаружен, второй является сокращением jQuery для $( document ).ready() и будет запущен, когда DOM будет готов для JavaScript. Решение состоит в том, чтобы переместить скрипт под #masonry-container div или использовать событие ready. В WordPress есть небольшая проблема, поскольку по умолчанию используется jQuery jQuery.noConflict() , поэтому $ не ссылается на объект jQuery. Мое любимое решение для этого:

 jQuery(function ($) {

});
  

Он будет запущен в document ready с $ в качестве псевдонима jQuery.

Примечание: — используйте position: relative в #masonry-container div, как указано в документации.

Комментарии:

1. Большое вам спасибо за вашу помощь ~! Я слишком долго ломал голову над этим.