To jest post gościnny Josha Pollocka
Wyświetlanie postów w stylu przypominającym Pinterest, siatka postów, od jakiegoś czasu jest popularnym projektem dla stron indeksu blogów WordPress. Jest popularny nie tylko dlatego, że naśladuje wygląd popularnego serwisu społecznościowego, ale także dlatego, że najlepiej wykorzystuje przestrzeń na ekranie. Na stronie indeksu bloga WordPress pozwala każdemu podglądowi posta mieć naturalnie potrzebny mu rozmiar, bez pozostawiania dodatkowego miejsca.
W tym tutorialu pokażę Ci, jak używać popularnej biblioteki JavaScript Masonry do tworzenia kaskadowych układów siatki dla indeksu Twojego bloga, a także stron archiwum Twojego motywu. Omówię kilka problemów, które musisz wziąć pod uwagę w przypadku optymalizacji mobilnej i jak je rozwiązać.

Uwaga: Jest to samouczek na poziomie zaawansowanym, przeznaczony dla osób, które czują się komfortowo edytując motywy WordPress i posiadają wystarczającą wiedzę z zakresu HTML/CSS.
Krok 1: Dodaj niezbędne biblioteki do swojego motywu
Aktualizacja: WordPress 3.9 zawiera teraz najnowszą wersję Masonry.
Najpierw musisz załadować Masonry do swojego motywu, używając tego kodu:
if (! function_exists('slug_scripts_masonry') ) :
if ( ! is_admin() ) :
function slug_scripts_masonry() {
wp_enqueue_script('masonry');
wp_enqueue_style('masonry’, get_template_directory_uri().'/css/’);
}
add_action( 'wp_enqueue_scripts', 'slug_scripts_masonry' );
endif; //! is_admin()
endif; //! slug_scripts_masonry exists
Ten kod po prostu ładuje masonry i udostępnia go w plikach szablonu motywu (zobacz nasz przewodnik, jak prawidłowo dodać JavaScript i style w WordPressie). Należy również pamiętać, że nie dodajemy jQuery jako zależności dla żadnego z nich. Jedną z zalet Masonry 3 jest to, że nie wymaga jQuery, ale może być z nim używany. Z mojego doświadczenia wynika, że inicjalizacja Masonry bez jQuery jest bardziej niezawodna i otwiera możliwość pominięcia ładowania jQuery, co może pomóc zarówno w czasie ładowania strony, jak i w problemach z kompatybilnością.
Krok 2: Zainicjuj Javascript
Ta następna funkcja konfiguruje Masonry, definiuje używane z nią kontenery i zapewnia, że wszystko dzieje się we właściwej kolejności. Masonry musi obliczyć rozmiar każdego elementu na stronie, aby dynamicznie układać siatkę. Problem, z którym się spotkałem w Masonry w wielu przeglądarkach, polega na tym, że Masonry błędnie oblicza wysokość elementów z wolno ładującymi się obrazami, co prowadzi do nakładania się elementów. Rozwiązaniem jest użycie imagesLoaded, aby zapobiec obliczaniu układu przez Masonry do momentu załadowania wszystkich obrazów. Zapewnia to prawidłowe wymiarowanie.
Oto funkcja i akcja, która wyprowadzi skrypt inicjalizujący w stopce strony:
if ( ! function_exists( 'slug_masonry_init' )) :
function slug_masonry_init() { ?>
<script>
//set the container that Masonry will be inside of in a var
var container = document.querySelector('#masonry-loop');
//create empty var msnry
var msnry;
// initialize Masonry after all images have loaded
imagesLoaded( container, function() {
msnry = new Masonry( container, {
itemSelector: '.masonry-entry'
});
});
</script>
<?php }
//add to wp_footer
add_action( 'wp_footer', 'slug_masonry_init' );
endif; // ! slug_masonry_init exists
Funkcja jest wyjaśniona krok po kroku za pomocą komentarzy w linii. Funkcja JavaScript mówi Masonry, aby szukał w kontenerze o identyfikatorze „masonry-loop” elementów o klasie „masonry-entry” i obliczał siatkę dopiero po załadowaniu obrazów. Ustawiamy zewnętrzny kontener za pomocą querySelector, a wewnętrzny za pomocą itemSelector.
Krok 2: Utwórz pętlę Masonry
Zamiast dodawać znaczniki HTML dla Masonry bezpośrednio do szablonu, stworzymy dla niego osobną część szablonu. Utwórz nowy plik o nazwie „content-masonry.php” i dodaj go do swojego motywu. Pozwoli to na dodanie pętli Masonry do tylu różnych szablonów, ilu chcesz.
W nowym pliku dodasz poniższy kod. Znaczniki są podobne do tych, które normalnie zobaczysz w podglądzie dowolnej treści. Możesz je dowolnie modyfikować, upewnij się tylko, że najbardziej zewnętrzny element ma klasę „masonry-entry”, którą ustawiliśmy jako selektor elementów w ostatnim kroku.
<article class="masonry-entry" 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><!--.masonry-thumbnail-->
<?php endif; ?>
<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 -->
</article><!--/.masonry-entry-->
Ten znacznik ma klasy dla każdej ze swoich części, dzięki czemu możesz dodać znaczniki pasujące do Twojego motywu. Lubię dodawać ładną, lekko zaokrągloną ramkę do .masonry-entry. Inną miłą opcją jest brak ramki dla .masonry-entry, ale nadanie jej lekkiego cienia. Wygląda to szczególnie dobrze, gdy miniatura posta rozciąga się na całą szerokość pojemnika, co można osiągnąć, nadając .masonry-thumbnail marginesy i dopełnienia równe 0 we wszystkich kierunkach. Wszystkie te style będziesz chciał dodać do pliku o nazwie masonry.css w katalogu css Twojego motywu.
Krok 3: Dodaj pętlę Masonry do szablonów
Teraz, gdy mamy już naszą część szablonu, możesz jej użyć w dowolnym szablonie w swoim motywie. Możesz dodać ją do index.php, ale nie do category.php, jeśli nie chcesz, aby była używana dla archiwów kategorii. Jeśli chcesz, aby była używana tylko na stronie głównej Twojego motywu, gdy jest ustawiona na wyświetlanie postów z bloga, użyłbyś jej w home.php. Gdziekolwiek wybierzesz, wszystko, co musisz zrobić, to owinąć swoją pętlę w kontener z identyfikatorem „masonry-loop” i dodać część szablonu do pętli za pomocą get_template_part(). Pamiętaj, aby rozpocząć kontener pętli masonry przed while (have_posts() ).
Na przykład, oto główna pętla z index.php motywu twentythirteen:
<?php if ( have_posts() ) : ?>
<?php /* The loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>
<?php twentythirteen_paging_nav(); ?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>
A oto zmodyfikowana wersja, aby użyć naszej pętli Masonry:
<?php if ( have_posts() ) : ?>
<div id="masonry-loop">
<?php /* The loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', 'masonry' ?>
<?php endwhile; ?>
</div><!--/#masonry-loop-->
<?php twentythirteen_paging_nav(); ?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>
Krok 4: Ustaw responsywne szerokości elementów Masonry
Istnieje kilka sposobów ustawienia szerokości każdego elementu Masonry. Szerokość można ustawić za pomocą liczby pikseli podczas inicjalizacji Masonry. Nie przepadam za tym, ponieważ używam responsywnych motywów i wymaga to skomplikowanych zapytań medialnych, aby wszystko działało poprawnie na małych ekranach. W przypadku projektów responsywnych najlepszym rozwiązaniem okazało się ustawienie wartości szerokości dla .masonry-entry za pomocą procentu, w zależności od tego, ile elementów chcesz mieć w rzędzie, a resztę obliczeń pozostawić Masonry.
Wszystko, czego potrzeba, to podzielenie 100 przez liczbę elementów, które chcesz ustawić jako procent, w prostym wpisie w pliku style.css Twojego motywu. Na przykład, jeśli chcesz mieć cztery elementy w każdym wierszu, możesz zrobić to w pliku masonry.css:
.masonry-entry{width:25%}
Krok 5: Optymalizacja mobilna
Możemy tutaj zakończyć, ale nie sądzę, że końcowy rezultat działa niesamowicie dobrze na małych ekranach telefonów. Gdy będziesz zadowolony z tego, jak wygląda Twój motyw z nową siatką Masonry na komputerze, sprawdź go na telefonie. Jeśli nie jesteś zadowolony z tego, jak wygląda na telefonie, będziesz musiał trochę popracować.
Nie sądzę, że na ekranie telefonu jest wystarczająco dużo miejsca na wszystko, co dodaliśmy do naszej części szablonu content-masonry. Dwie dobre rozwiązania dostępne dla Ciebie to skrócenie fragmentu dla telefonów lub całkowite pominięcie go. Oto dodatkowa funkcja, którą możesz dodać do pliku functions.php swojego motywu, aby to zrobić. Ponieważ nie sądzę, że te problemy występują na tabletach, używam świetnej wtyczki Mobble we wszystkich przykładach w tej sekcji, aby wprowadzać zmiany tylko na telefonach, a nie na tabletach. Sprawdzam również, czy Mobble jest aktywny, zanim go użyję, i w razie potrzeby wracam do bardziej ogólnej funkcji wykrywania urządzeń mobilnych wp_is_mobile, która jest wbudowana w WordPressa.
if (! function_exists('slug_custom_excerpt_length') ) :
function slug_custom_excerpt_length( $length ) {
//set the shorter length once
$short = 10;
//set long length once
$long = 55;
//if we can only set short excerpt for phones, else short for all mobile devices
if (function_exists( 'is_phone') {
if ( is_phone() ) {
return $short;
}
else {
return $long;
}
}
else {
if ( wp_is_mobile() ) {
return $short;
}
else {
return $long;
}
}
}
add_filter( 'excerpt_length', 'slug_custom_excerpt_length', 999 );
endif; // ! slug_custom_excerpt_length exists
Jak widać, zaczynamy od przechowywania długości długiego i krótkiego fragmentu w zmiennych, ponieważ będziemy używać tych wartości dwukrotnie i chcemy móc je zmienić z jednego miejsca, jeśli zajdzie taka potrzeba później. Stamtąd sprawdzamy, czy możemy użyć Mobble’s is_phone(). Jeśli tak, ustawiamy krótki fragment dla telefonów, a długi fragment, jeśli nie jesteśmy. Po tym robimy to samo, ale używając wp_is_mobile, co wpłynie na wszystkie urządzenia mobilne, jeśli is_phone() nie może być użyte. Mamy nadzieję, że część else tej funkcji nigdy nie zostanie użyta, ale dobrze jest mieć zapas na wszelki wypadek. Gdy logika długości fragmentu zostanie ustawiona, pozostaje tylko podłączenie funkcji do filtra excerpt_length.
Skrócenie fragmentu jest jedną z opcji, ale możemy go również całkowicie usunąć za pomocą prostego procesu. Oto nowa wersja content-masonry, z całkowicie pominiętą częścią fragmentu na telefonach:
<article class="masonry-entry" 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><!--.masonry-thumbnail-->
<?php endif; ?>
<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>
<?php
//put the excerpt markup in variable so we don't have to repeat it multiple times.
$excerpt = '<div class="masonry-post-excerpt">';
$excerpt .= the_excerpt();
$excerpt .= '</div><!--.masonry-post-excerpt-->';
//if we can only skip for phones, else skip for all mobile devices
if (function_exists( 'is_phone') {
if ( ! is_phone() ) {
echo $excerpt;
}
}
else {
if ( ! wp_is_mobile() ) {
echo $excerpt;
}
}
?>
</div><!--/.masonry-entry-details -->
</article><!--/.masonry-entry-->
Tym razem sprawdzamy, czy nie jesteśmy na urządzeniu telefonicznym/mobilnym, a jeśli tak, zwracamy fragment naszej pętli. Jeśli jesteśmy na urządzeniu telefonicznym/mobilnym, nic nie robimy.
Inną rzeczą, którą możesz chcieć zrobić, jest zwiększenie szerokości elementów Masonry, co zmniejsza ich liczbę w wierszu na urządzeniach mobilnych. Aby to zrobić, dodamy inny styl wbudowany do nagłówka na podstawie wykrywania urządzenia. Ponieważ ta funkcja używa wp_add_inline_styles, będzie ona zależna od określonego arkusza stylów. W tym przypadku używam masonry.css, który możesz chcieć zachować swoje style masonry oddzielnie. Jeśli ostatecznie go nie użyjesz, możesz użyć uchwytu z innego, już zarejestrowanego arkusza stylów.
if ( ! function_exists ( 'slug_masonry_styles' ) ) :
function slug_masonry_styles() {
//set the wide width
$wide = '25%';
//set narrow width
$narrow = '50%';
/**Determine value for $width**/
//if we can only set narrow for phones, else narrow for all mobile devices
if (function_exists( 'is_phone') {
if ( is_phone() ) {
$width = $narrow;
}
else {
$width = $wide;
}
}
else {
if ( wp_is_mobile() ) {
$width = $narrow;
}
else {
$width = $wide;
}
}
/**Output CSS for .masonry-entry with proper width**/
$custom_css = ".masonry-entry{width: {$width};}";
//You must use the handle of an already enqueued stylesheet here.
wp_add_inline_style( 'masonry', $custom_css );
}
add_action( 'wp_enqueue_scripts', 'slug_masonry_styles' );
endif; // ! slug_masonry_styles exists
Ta funkcja dodaje niestandardowy arkusz stylów, a następnie ustawia wartość szerokości, używając logiki, która powinna być już bardzo znajoma. Następnie tworzymy zmienną $custom_css, przekazując wartość szerokości do zwykle wyglądającego fragmentu CSS z {$width}. Następnie używamy wp_add_inline_style, aby poinformować WordPress, aby wydrukował nasze style w linii w nagłówku, gdy używany jest arkusz stylów Masonry, a następnie podłączamy całą funkcję do wp_enqueue_scripts i gotowe.
Jeśli wybrałeś połączenie stylów Masonry z istniejącym arkuszem stylów, upewnij się, że używasz uchwytu tego arkusza stylów z wp_add_inline_style, w przeciwnym razie Twoje style wbudowane nie zostaną uwzględnione. Lubię używać wp_add_inline_style, ponieważ zazwyczaj opakowuję haczyk akcji do kolejkowania Masonry w warunku, dzięki czemu jest dodawany tylko wtedy, gdy jest potrzebny. Na przykład, jeśli używam Masonry tylko na moim indeksie bloga i stronach archiwum, zrobiłbym to:
if ( is_home() || is_archive() ) {
add_action( 'wp_enqueue_scripts', 'slug_scripts_masonry' );
}
Te ostatnie kilka przykładów powinno otworzyć inne pomysły w Twoim umyśle. Na przykład, możesz użyć podobnej logiki, aby całkowicie pominąć Masonry na urządzeniu mobilnym. Ponadto wp_add_inline_style() to mniej używana, ale bardzo pomocna funkcja, ponieważ pozwala programowo ustawiać różne style w oparciu o dowolny typ warunku. Może pozwolić na radykalną zmianę stylu dowolnego elementu w oparciu nie tylko o wykrywanie urządzenia, ale zmiany mogą być również oparte na tym, który szablon jest używany, lub nawet czy użytkownik jest zalogowany, czy nie.
Mam nadzieję, że widzisz te różne zmiany, które wprowadzam, jako okazję do kreatywności. Masonry i podobne systemy siatek kaskadowych są popularne od jakiegoś czasu, więc nadszedł czas na nowe zwroty w tym popularnym pomyśle. Pokażcie w komentarzach, jakie fajne sposoby wymyśliliście na wykorzystanie Masonry w motywie WordPress.
Wielozadaniowy człowiek od WordPressa, Josh Pollock pisze o WordPressie, zajmuje się tworzeniem motywów, jest menedżerem społeczności dla Pods Framework i orędownikiem rozwiązań open source dla zrównoważonego projektowania.


Gabi
Cześć, chciałem wiedzieć, czy istnieje sposób na użycie siatki Masonry do wyświetlania zarejestrowanych użytkowników. Jakieś pomysły?
Neil
Krótka uwaga: jeśli otrzymujesz błąd „imagesLoaded”, spróbuj dodać kod Javascript po wywołaniu wp_footer w swoim footer.php.
To działa u mnie:
Dodaj do functions.php
add_action( ‘wp_enqueue_scripts’, ‘slug_masonry’ );
function slug_masonry( ) {
wp_enqueue_script( ‘masonry’ ); // uwaga, to nie jest jQuery
}
W swoim pętli upewnij się, że twój div jest:
A klasa obrazu to:
a następnie po wp_footer w swoim footer.php to:
//ustaw kontener, w którym będzie znajdował się Masonry, w zmiennej
var container = document.querySelector(‘#masonry-loop’);
//utwórz pustą zmienną msnry
var msnry;
// zainicjuj Masonry po załadowaniu wszystkich obrazów
imagesLoaded( container, function() {
msnry = new Masonry( container, {
itemSelector: ‘.masonry-entry’
});
});
Marisa Di Monda
Cześć Andy, właśnie to wypróbowałem i nie udało mi się tego uruchomić. Wszystko nadal działa pionowo w jednej kolumnie.
Jakieś rozwiązania?
Marisa Di Monda
Mam ten sam problem. Czy udało wam się go rozwiązać?
Peter
did not work for me. i see only two images on my front page which are arranged underneath. don’t know where is the problem
Eva
Z jakiegoś powodu moje posty wyświetlają się po prostu w rzędach jak zwykle, a nie w formie masonry, nie jestem pewien, jak to się może stać. Jakieś pomysły?
Peter
tak, mam ten sam błąd. jakieś rozwiązania?
jcbrmn06
Dla każdego, kto wciąż ma problemy z tym, zauważyłem, że ten kod:
// ustaw kontener, w którym będzie znajdował się Masonry, w zmiennej
var container = document.querySelector(‘#masonry-loop’);
// utwórz pustą zmienną msnry
var msnry;
// inicjalizuj Masonry po załadowaniu wszystkich obrazów
imagesLoaded( container, function() {
msnry = new Masonry( container, {
itemSelector: ‘.masonry-entry’
});
});
Był przed biblioteką JS Masonry. Dlatego otrzymujesz błąd imagesLoaded. Jak sugerował Andy poniżej, umieszczenie go w nagłówku powinno to naprawić. W zasadzie musisz tylko upewnić się, że biblioteka musi być przed tym kodem.
Andy Giesler
Jeszcze raz dziękuję za ten tutorial, naprawdę pomógł mi zacząć.
Nawet gdy wszystko było na miejscu, napotkałem sporadyczne problemy, gdzie kafelki po prostu układały się w jednym rzędzie po lewej stronie strony, a Firebug potwierdził, że czasami kod Masonry nie był wykonywany. Działo się to tylko okazjonalnie i tylko w Firefoksie.
Wydawało się, że w pewnych scenariuszach ładowania występowały problemy z kodem próbującym wykonać się przed załadowaniem wymaganych plików. Nie sądzę, aby był to problem z imagesLoaded, ponieważ ma on inne objawy.
Naprawiłem problem w następujący sposób:
Funkcja „slug_masonry_init” umieszcza kod inicjujący masonry bezpośrednio w stopce. Usunąłem całą tę funkcję (a także kod add_action „wp_footer”) i przeniosłem JS do zewnętrznego pliku: masonry-init.js
2. Umieściłem kod inicjalizujący masonry w jQuery, aby skorzystać z jego możliwości document.ready. Niestety, trzeba dodać jQuery, ponieważ jest to wersja Masonry bez jQuery, ale document.ready wydawało się konieczne, aby kod wykonał się we wszystkich scenariuszach ładowania.
(function( $ ) {
“use strict”;
$(function() {
}); }(jQuery));
3. Dodałem skrypty w ten sposób:
wp_enqueue_script( ‘masonry’ );
wp_enqueue_script( ‘jquery’ );
wp_enqueue_script( ‘masonryInit’, get_stylesheet_directory_uri().’/js/masonry-init.js’, array( ‘masonry’, ‘jquery’ ) );
Daniel Nikolovski
Zrobione dokładnie tak, jak w samouczku, wp 3.9.1.. imagesLoaded nie jest nawet ładowany. Jakaś pomoc byłaby bardzo mile widziana
Tiago Celestino
Ten, gdzie jest zdefiniowany „masonry-thumb”?? Czy to domyślny rozmiar miniaturki w Masonry WordPress?
Zespół WPBeginner
Sprawdź nasz przewodnik, jak prawidłowo dodać JavaScript i style w WordPress.
Jenny Beaumont
Mam problem z uruchomieniem tego… postępowałem zgodnie z instrukcjami, opierając się na _s, ale moje kolumny się nie zawijają – dostaję tylko jedną długą. Czy masz jakieś przykłady CSS do tego? Oczywiście czegoś mi brakuje. Pozdrawiam!
marisa
Cześć Jenny
Mam ten sam problem. Czy rozwiązałeś swój problem?
caratcake
Jestem strasznie zdezorientowany. Wykonałem każdy krok dosłownie, a moja strona po prostu się wyłącza. Problem z plikiem funkcji. Moja przeglądarka nawet nie sugeruje, która linia powoduje błąd, wszystko co dostaję to „
Błąd serwera
Witryna napotkała błąd podczas pobierania (url) Może być niedostępna z powodu konserwacji lub nieprawidłowej konfiguracji.”
To samo stało się ze stroną logowania WP Admin. Usunąłem functions.php z folderu mojego motywu i ekran logowania został przywrócony, ale strona główna nie. Jeśli mógłbyś mi dać jakieś wskazówki, co może być problemem, byłbym bardzo wdzięczny. Niezależnie od tego, dziękuję bardzo za tutorial i szczegółowe wyjaśnienia.
Andy Giesler
W przypadku, gdy pomoże to innym w uruchomieniu przykładu:
U mnie to nie działało, nawet po wprowadzeniu poprawki, o której wspominali inni – zmianie „function slug_masonry_exists()” na „function slug_masonry_init()”. Biblioteki były ładowane, ale Masonry nie działał.
Następnie zmieniłem wywołania wp_enqueue_script, tak aby Masonry i imagesLoaded były ładowane w nagłówku zamiast na dole.
Nagle wszystko zadziałało.
Jean
Cześć, nie mogę zrozumieć, jak zmienić wp_enqueue_script. Będę naprawdę wdzięczny, jeśli możesz to szczegółowo wyjaśnić. Dzięki!
gabi
Witaj, u mnie to nie działa. Mam komunikat o błędzie:
” Parse error: syntax error, unexpected T_ENDIF in…”…functions.php on line 17
Oznacza to błąd w skrypcie z 3. kroku. Co przeoczyłem?
werner
Czy zaktualizujesz swój post ze względu na fakt, że teraz z wersją 3.9 Masonry3 jest w rdzeniu WordPressa?
Personel redakcyjny
Tak, pracujemy nad jego aktualizacją.
Admin
Steven Gardner
Skrypt inicjalizujący jest stale wywoływany przed zdefiniowaniem imagesloaded, więc otrzymuję
Uncaught ReferenceError: imagesLoaded is not defined
Jak mogę upewnić się, że imagesLoaded jest dostępne, zanim zacznę inicjalizować rzeczy?
Violacase
imagesLoaded jest wywoływane przed ustanowieniem kolejkowania. Nadaj mu niski priorytet, aby był wywoływany jako ostatni, na przykład:
add_action( ‘wp_footer’, ‘slug_masonry_init’, 100000 );
To mi pomogło.
Uwaga: Myślę, że ten artykuł wymaga aktualizacji. Nie tylko z powodu tego problemu.
Chplusink
Dzięki! To jedyne rozwiązanie, które u mnie zadziałało.
Kate
Dziękuję za ten post. Próbuję skonfigurować stronę bloga z postami w stylu Masonry, ale utknąłem na kroku 1. Zawsze, gdy dodaję funkcje do dodawania dwóch bibliotek do mojego pliku functions, moja strona całkowicie się wyłącza. Ponieważ rozwijam w podkatalogu, próbowałem uczynić ścieżki do plików js absolutnymi, a nie względnymi, ale to nie pomogło. Czy masz pomysł, czego mi brakuje?
Steven Gardner
Tak, ja też.
Używam wersji 3.8.3, więc WordPress nie zaktualizował jeszcze do wersji V3 masonry, co, jak myślałem, mogło być problemem.
Planują to zrobić w wydaniu 3.9 http://make.wordpress.org/core/2014/03/27/masonry-in-wordpress-3-9/
Angie Lee
Cześć,
Otrzymuję ten błąd: „ReferenceError: imagesLoaded is not defined” proszę o pomoc.
Violacase
Patrz wyżej
Amitabha Ghosh
Dzięki. To świetny post i działa dla mnie. Tworzę szablon z tym kodem i działa idealnie. Ale napotykam dwie przeszkody:
1. Chcę ograniczyć liczbę postów na mojej stronie indeksu, aby wyświetlało się pierwszych 6 do 7 postów, a poniżej będzie przycisk z funkcją „Załaduj więcej”, który po kliknięciu załaduje pozostałe posty.
2. Próbuję zintegrować nieskończone przewijanie javascript Paula Irish, ale nie udało mi się. Jakaś pomoc??
Dzięki
Ismar Hadzic
Cóż, postępowałem zgodnie ze wszystkimi Twoimi krokami i napotkałem krytyczny błąd „PHP Fatal error: Call to undefined function wp_enquqe_style()” i nadal nie rozumiem, dlaczego wp_enquqe_style() nie rozumiem, dlaczego możesz to sprawdzić.
AndyM
Cześć
Chciałem skomentować, aby zwrócić uwagę, że jest to literówka i powinno być:
wp_enqueue_style
Andre
Świetny tutorial… tylko jedna rzecz w kroku 3… to:
…brakuje nawiasu:
Aurélien Denis
Cześć!
Ten post jest świetnym początkiem, ale znalazłem kilka błędów…
1/ Powinieneś użyć the_title_attribute() dla atrybutu title zamiast title
2/ add_action( ‘wp_footer’, ‘slug_masonry_exists’ ); to poprawny kod, a nie add_action( ‘wp_footer’, ‘slug_masonry_init’ );
Na zdrowie!
Zulian
Actually, you don’t need to use title attributes.
AndyM
Zastanawiam się, czy
if ( ! function_exists( ‘slug_masonry_init’ )) :
function slug_masonry_exists() { ?>
powinno być:
if ( ! function_exists( ‘slug_masonry_init’ )) :
function slug_masonry_init() { ?>
Ben Racicot
Nie mogę tego uruchomić z nieskończonym przewijaniem w moim CB sukcesu $ajax. Będę wdzięczny za wszelkie rady.
Tomasz Bystrek
Szukałem tego efektu, ale nie wiedziałem, jak się nazywa i jak go szukać, aż do teraz. Z pewnością wypróbuję go w jednym z moich przyszłych projektów bloga fotograficznego. Dzięki!
Katrina Moody
Great post – wish it was around when I started working with Masonry on a theme a few weeks ago
A couple variations – I created a new post-thumbnail image size to pull in so that both horizontal and vertical images would have equal attention within the Masonry pages – it’s fairly easy to change out the actual image for a new one (I did that at first, creating a new “entry-thumbnail” size and allowing unlimited length so that horizontal images would display properly). Then I just edited the post-thumbnail
Owinąłem również miniaturę posta w tag , aby umożliwić jej powrót do stałego linku posta (zmieniłem to, aby zwracać link do pliku multimedialnego, abym mógł zaimplementować efekt lightbox – zgodnie z życzeniem klienta), dzięki czemu odwiedzający mogliby przejść bezpośrednio do posta.
I also added a hover effect to the post-thumbnail to indicate it was clickable
Teraz muszę przejrzeć to, co zrobiłem, porównać z Twoim i zobaczyć, co mogę poprawić dzięki Twojej wiedzy (uwielbiam społeczność WordPress!)
Ivan Vilches
chłopaki, cały ten kod jest w functions.php? dzięki