Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPB Cup
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Wie man Masonry verwendet, um ein Beitragsraster im Stil von Pinterest in WordPress hinzuzufügen

Dies ist ein Gastbeitrag von Josh Pollock

Die Pinterest-ähnliche Gitterdarstellung von Beiträgen ist seit einiger Zeit ein beliebtes Design für WordPress-Blog-Indexseiten. Es ist nicht nur beliebt, weil es das Aussehen der beliebten Social-Media-Website nachahmt, sondern auch, weil es den Platz auf dem Bildschirm optimal nutzt. In einem WordPress-Blog-Index kann jede Beitragsvorschau die Größe haben, die sie natürlich haben muss, ohne zusätzlichen Platz zu lassen.

In diesem Tutorial zeige ich Ihnen, wie Sie mit der beliebten Masonry JavaScript Library kaskadierende Grid-Layouts für Ihren Blog-Index sowie Archivseiten für Ihr Thema erstellen können. Ich werde einige Probleme ansprechen, die Sie für die mobile Optimierung berücksichtigen müssen, und wie Sie diese lösen können.

Screenshot of Masonry Grid Layout in WordPress

Hinweis: Dies ist ein Tutorial für Fortgeschrittene, die mit der Bearbeitung von WordPress-Themes vertraut sind und über ausreichende HTML/CSS-Kenntnisse verfügen.

Schritt 1: Fügen Sie die erforderlichen Bibliotheken zu Ihrem Theme hinzu

Update: WordPress 3.9 enthält jetzt die neueste Version von Masonry.

Zuerst müssen Sie Masonry in Ihr Theme laden, indem Sie diesen Code verwenden:

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

Dieser Code lädt einfach Masonry und macht es für die Vorlagendateien Ihres Themes verfügbar (siehe unsere Anleitung zum korrekten Hinzufügen von JavaScripts und Styles in WordPress). Beachten Sie auch, dass wir jQuery nicht als Abhängigkeit für beide hinzufügen. Einer der Vorteile von Masonry 3 ist, dass es jQuery nicht benötigt, aber mit ihm verwendet werden kann. Meiner Erfahrung nach ist die Initialisierung von Masonry ohne jQuery zuverlässiger und eröffnet die Möglichkeit, das Laden von jQuery zu überspringen, was sowohl bei den Seitenladezeiten als auch bei Kompatibilitätsproblemen helfen kann.

Schritt 2: Initialisieren Sie das Javascript

Diese nächste Funktion richtet Masonry ein, definiert die Container, die mit ihm verwendet werden, und sorgt dafür, dass alles in der richtigen Reihenfolge geschieht. Masonry muss die Größe der einzelnen Elemente auf der Seite berechnen, um sein Raster dynamisch zu gestalten. Ein Problem, auf das ich mit Masonry in vielen Browsern gestoßen bin, ist, dass Masonry die Höhe von Elementen mit langsam ladenden Bildern falsch berechnet, was zu überlappenden Elementen führt. Die Lösung ist, imagesLoaded zu verwenden, um zu verhindern, dass Masonry das Layout berechnet, bis alle Bilder geladen sind. Dies gewährleistet eine korrekte Größenbestimmung.

Dies ist die Funktion und Aktion, die das Initialisierungsskript in der Fußzeile der Seite ausgibt:

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

Die Funktion wird Schritt für Schritt mit Inline-Kommentaren erklärt. Die Javascript-Funktion weist Masonry an, in einem Container mit der ID „masonry-loop“ nach Elementen der Klasse „masonry-entry“ zu suchen und das Raster erst nach dem Laden der Bilder zu berechnen. Wir setzen den äußeren Container mit querySelector und den inneren mit itemSelector.

Schritt 2: Masonry-Schleife erstellen

Anstatt das HTML-Markup für Masonry direkt in eine Vorlage einzufügen, werden wir einen separaten Vorlagenteil dafür erstellen. Erstellen Sie eine neue Datei mit dem Namen „content-masonry.php“ und fügen Sie sie zu Ihrem Thema hinzu. Auf diese Weise können Sie die Masonry-Schleife in so viele verschiedene Vorlagen einfügen, wie Sie möchten.

In die neue Datei fügen Sie den unten abgebildeten Code ein. Das Markup ist ähnlich wie das, was Sie normalerweise für jede Inhaltsvorschau sehen. Sie können ihn nach Belieben ändern, stellen Sie nur sicher, dass das äußerste Element die Klasse „masonry-entry“ hat, die wir im letzten Schritt als itemSelector festgelegt haben.

<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-->

Dieses Markup hat Klassen für jedes seiner Teile, so dass Sie Markup hinzufügen können, das zu Ihrem Thema passt. Ich mag es, einen schönen, leicht abgerundeten Rahmen zu .masonry-entry hinzuzufügen. Eine weitere gute Möglichkeit ist, .masonry-entry keinen Rahmen zu geben, sondern einen leichten Schatten zu erzeugen. Das sieht besonders gut aus, wenn die Miniaturansicht des Beitrags bis zum Rand des Containers reicht, was erreicht werden kann, indem man .masonry-thumbnail Ränder und Abstände von 0 in alle Richtungen gibt. Fügen Sie alle diese Stile in einer Datei namens masonry.css im css-Verzeichnis Ihres Themas hinzu.

Schritt 3: Masonry-Schleife zu Vorlagen hinzufügen

Jetzt, wo wir unseren Vorlagenteil haben, können Sie ihn in jeder beliebigen Vorlage in Ihrem Thema verwenden. Sie können ihn in index.php einfügen, aber nicht in category.php, wenn Sie ihn nicht für Kategoriearchive verwenden wollen. Wenn Sie es nur auf der Startseite Ihres Themes verwenden wollen, wenn es Blogbeiträge anzeigt, würden Sie es in home.php verwenden. Wo auch immer Sie die Schleife einsetzen wollen, Sie müssen sie nur in einen Container mit der ID „masonry-loop“ packen und den Template-Teil mit get_template_part() in die Schleife einfügen. Stellen Sie sicher, dass Sie den Container „masonry-loop“ vor while (have_posts() ) starten.

Hier ist zum Beispiel die Hauptschleife aus der index.php von 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; ?>

Und hier ist sie geändert, um unsere Masonry-Schleife zu verwenden:

<?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; ?>

Schritt 4: Responsive Breiten der Masonry-Elemente einstellen

Es gibt mehrere Möglichkeiten, die Breite der einzelnen Masonry-Elemente festzulegen. Sie können die Breite mit einer Anzahl von Pixeln festlegen, wenn Sie Masonry initialisieren. Ich bin kein Fan dieser Methode, da ich responsive Themes verwende und es einige komplexe Media-Queries erfordert, um die Dinge auf kleinen Bildschirmen richtig zu machen. Für responsive Designs ist es am besten, einen Breitenwert für .masonry-entry mit einem Prozentsatz festzulegen, der davon abhängt, wie viele Elemente Sie in einer Reihe haben möchten, und Masonry den Rest der Mathematik für Sie erledigen zu lassen.

Dazu müssen Sie nur 100 durch die Anzahl der gewünschten Elemente teilen, um den Prozentsatz in einem einfachen Eintrag in der style.css Ihres Themas festzulegen. Wenn Sie zum Beispiel vier Elemente in jeder Zeile haben möchten, können Sie dies in Ihrer masonry.css-Datei tun:

.masonry-entry{width:25%}

Schritt 5: Mobile Optimierung

Wir könnten hier aufhören, aber ich glaube nicht, dass das Endergebnis auf kleinen Telefonbildschirmen besonders gut funktioniert. Wenn Sie damit zufrieden sind, wie Ihr Thema mit dem neuen Masonry-Gitter auf Ihrem Desktop aussieht, sehen Sie es sich auf Ihrem Handy an. Wenn Sie mit der Darstellung auf Ihrem Handy nicht zufrieden sind, müssen Sie ein wenig nachbessern.

Ich glaube nicht, dass auf dem Bildschirm eines Telefons genug Platz für alles ist, was wir zu unserem Content-Masonry-Vorlagenteil hinzugefügt haben. Zwei gute Lösungen sind, den Auszug für Handys zu kürzen oder ihn ganz wegzulassen. Hier ist eine zusätzliche Funktion, die Sie in die functions.php Ihres Themes einfügen können, um dies zu tun. Da ich nicht glaube, dass diese Probleme auf Tablets auftreten, verwende ich in allen Beispielen in diesem Abschnitt das großartige Plugin Mobble, um die Änderungen nur auf Handys und nicht auf Tablets vorzunehmen. Ich überprüfe auch, ob Mobble aktiv ist, bevor ich es verwende, und greife gegebenenfalls auf die allgemeinere Funktion zur Erkennung von Mobilgeräten wp_is_mobile zurück, die in WordPress integriert ist.

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

Wie Sie sehen können, speichern wir zunächst die Länge des langen und des kurzen Auszugs in Variablen, da wir diese Werte zweimal verwenden werden und wir sie bei Bedarf später an einer Stelle ändern können möchten. Von dort aus testen wir, ob wir Mobbles is_phone() verwenden können. Wenn ja, setzen wir den kurzen Auszug für Telefone und den langen Auszug, wenn dies nicht der Fall ist. Danach machen wir das Gleiche, verwenden aber wp_is_mobile, was alle mobilen Geräte betrifft, wenn is_phone() nicht verwendet werden kann. Hoffentlich wird der else-Teil dieser Funktion nie verwendet, aber es ist gut, für den Fall der Fälle ein Backup zu haben. Sobald die Logik für die Auszugslänge festgelegt ist, muss die Funktion nur noch mit dem Filter excerpt_length verknüpft werden.

Den Auszug zu kürzen ist eine Möglichkeit, aber wir können ihn auch mit einem einfachen Verfahren ganz abschaffen. Hier ist eine neue Version von content-masonry, bei der der gesamte Auszug auf Telefonen weggelassen wurde:

<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-->

Dieses Mal testen wir, ob wir uns nicht auf einem Telefon/Mobilgerät befinden, und wenn ja, geben wir den Auszugsteil unserer Schleife zurück. Wenn wir uns auf einem Telefon/Mobilgerät befinden, tun wir nichts.

Eine andere Sache, die Sie vielleicht tun möchten, ist, die Breite der Masonry-Elemente zu erhöhen, was die Anzahl in einer Reihe auf mobilen Geräten reduziert. Dazu fügen wir der Kopfzeile einen anderen Inline-Stil hinzu, der auf der Geräteerkennung basiert. Da diese Funktion wp_add_inline_styles verwendet, ist sie von einem bestimmten Stylesheet abhängig. In diesem Fall verwende ich die Datei masonry.css, die Sie vielleicht verwenden möchten, um die Stile für Ihre Mauerwerke getrennt zu halten. Wenn Sie das nicht verwenden, können Sie das Handle eines anderen, bereits registrierten Stylesheets verwenden.

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

Diese Funktion ruft das benutzerdefinierte Stylesheet auf und setzt dann einen Wert für die Breite mit einer Logik, die nun sehr vertraut sein sollte. Danach erstellen wir die Variable $custom_css, indem wir den Wert für die Breite in ein ansonsten normal aussehendes Stück CSS mit {$width} einfügen. Danach verwenden wir wp_add_inline_style, um WordPress mitzuteilen, dass es unsere Inline-Stile im Header ausgeben soll, wenn das Masonry-Stylesheet verwendet wird, und dann haken wir die ganze Funktion an wp_enqueue_scripts an und sind fertig.

Wenn Sie Ihre Masonry-Stile in ein bestehendes Stylesheet einbinden wollen, müssen Sie das Handle dieses Stylesheets mit wp_add_inline_style verwenden, sonst werden Ihre Inline-Stile nicht berücksichtigt. Ich verwende gerne wp_add_inline_style, weil ich den Aktionshaken für das Einreihen von Masonry in eine Bedingung verpacke, damit er nur bei Bedarf hinzugefügt wird. Wenn ich zum Beispiel Masonry nur auf meinen Blog-Index- und Archivseiten verwende, würde ich dies tun:

if ( is_home() || is_archive() ) {
    add_action( 'wp_enqueue_scripts', 'slug_scripts_masonry' );
}

Diese letzten Beispiele sollten Ihnen weitere Ideen in den Sinn kommen lassen. Sie könnten zum Beispiel eine ähnliche Logik verwenden, um Masonry auf einem mobilen Gerät ganz zu überspringen. Auch wp_add_inline_style() ist eine wenig genutzte, aber sehr hilfreiche Funktion, die es Ihnen ermöglicht, programmatisch verschiedene Stile auf der Grundlage einer beliebigen Art von Bedingung festzulegen. Mit dieser Funktion können Sie den Stil eines beliebigen Elements radikal ändern, und zwar nicht nur auf der Grundlage der Geräteerkennung, sondern auch je nachdem, welche Vorlage verwendet wird oder ob der Benutzer eingeloggt ist oder nicht.

Ich hoffe, Sie sehen diese verschiedenen Änderungen, die ich vornehme, als eine Gelegenheit, kreativ zu werden. Masonry und ähnliche kaskadierende Gittersysteme sind schon seit einiger Zeit beliebt, es ist also an der Zeit, diese beliebte Idee neu zu interpretieren. Zeigen Sie uns in den Kommentaren, welche coolen Möglichkeiten Sie sich für die Verwendung von Masonry in einem WordPress-Theme ausgedacht haben.

Josh Pollock ist ein vielseitiger WordPress-Experte, der über WordPress schreibt, Themes entwickelt, als Community-Manager für das Pods Framework arbeitet und sich für Open-Source-Lösungen für nachhaltiges Design einsetzt.

Offenlegung: Unsere Inhalte werden von unseren Lesern unterstützt. Das bedeutet, dass wir möglicherweise eine Provision verdienen, wenn Sie auf einige unserer Links klicken. Mehr dazu erfahren Sie unter Wie WPBeginner finanziert wird , warum das wichtig ist und wie Sie uns unterstützen können. Hier finden Sie unseren redaktionellen Prozess .

Das ultimative WordPress Toolkit

Erhalte KOSTENLOSEN Zugang zu unserem Toolkit - eine Sammlung von WordPress-bezogenen Produkten und Ressourcen, die jeder Profi haben sollte!

Reader Interactions

38 KommentareEine Antwort hinterlassen

  1. Gabi

    Hi, i wanted to know if there is a way of using the masonry grid to show registered users. Any ideas?

  2. Neil

    Just a quick note if you’re getting the „imagesLoaded“ error, try adding the Javascript code after the wp_footer call in your footer.php.

    This work for me:

    Add to functions.php

    add_action( ‚wp_enqueue_scripts‘, ’slug_masonry‘ );
    function slug_masonry( ) {
    wp_enqueue_script(‚masonry‘); // note this is not jQuery
    }

    In your loop, make sure your div is:

    And the image class is:

    and then after wp_footer in your footer.php this:

    //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‘
    });
    });

  3. Marisa Di Monda

    Hi Andy I just tried this and I couldn’t get it to work. Everything is still running vertically in one column.
    Any solutions?

  4. Marisa Di Monda

    I’m having the same problem. Did you guys solve it?

  5. 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 :(

  6. Eva

    For some reason my posts will just all show just in rows like normal, not in masonry form, I’m not really sure how this can happen. Any ideas?

    • Peter

      yeah, i have the same error. any solutions for this?

  7. jcbrmn06

    For anyone still having issues with this, I noticed that this code:

    //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‘

    });

    });

    Was before the masonry JS library. Therefore you get the imagesLoaded error. Like Andy suggested below putting it in the header should fix it. Basically you just have to make sure the library has to come before this code.

  8. Andy Giesler

    Thanks again for this tutorial, it really helped start me on my way.

    Even with everything in place, I saw intermittent problems where the tiles simply ran down the left of the page in a single column, and Firebug confirmed that sometimes the Masonry code didn’t execute. This happened only occasionally, and only in Firefox.

    It seemed that under certain load scenarios, there were probems with code trying to execute before the required files were loaded. I don’t think this was an imagesLoaded problem, since that has different symptoms.

    I fixed the problem as follows:

    1. The „slug_masonry_init“ function places the masonry init code inline into the footer. I removed that whole function (as well as the add_action ‚wp_footer‘ code) and moved the JS into an extenal file: masonry-init.js

    2. I wrapped the masonry init code in jQuery to take advantage of its document.ready ability. It’s unfortunate to pull in jQuery since this is the jQuery-free version of Masonry, but document.ready seemed necessary for the code to execute in all load scenarios.

    (function( $ ) {
    „use strict“;
    $(function() {

    });
    }(jQuery));

    3. I enqueued the scripts like this:

    wp_enqueue_script( ‚masonry‘ );
    wp_enqueue_script( ‚jquery‘ );
    wp_enqueue_script( ‚masonryInit‘, get_stylesheet_directory_uri().’/js/masonry-init.js‘, array( ‚masonry‘, ‚jquery‘ ) );

  9. Daniel Nikolovski

    Done exactly as the tutorial says, wp 3.9.1.. imagesLoaded isn’t even being loaded. Some help would be highly appreciated

  10. Tiago Celestino

    This , where is define ‚masonry-thumb‘?? this default thumbnail size with masonry Wordpress?

  11. Jenny Beaumont

    I’m having trouble getting this to work…followed things accordingly, based on _s, but my columns don’t wrap – just get one long one. Have any css examples to go with? I’m obviously missing something. cheers!

    • marisa

      Hi Jenny

      I am having the same trouble. Did you solve your problem?

  12. caratcake

    I’m desperately confused. I performed every step down to the letter, and my site just goes blank. A problem with the functions file. My browser doesn’t even allude to which line causes any error, all I get is “
    Server error
    The website encountered an error while retrieving (url) It may be down for maintenance or configured incorrectly.“

    The same happened for the WP Admin login page. I deleted functions.php in my theme folder, and the login screen was restored, but the front page was not. If you could give me any clues to what the problem might be, I would be very grateful. Regardless, many thanks for the tutorial and in depth explanations.

  13. Andy Giesler

    In case this helps others to get the sample working:

    It wasn’t working for me even after I made the fix that others have noted — changing „function slug_masonry_exists()“ to „function slug_masonry_init()“. The libraries were being loaded, but Masonry wasn’t doing its thing.

    Then I changed the wp_enqueue_script calls so that Masonry and imagesLoaded got loaded in the header instead of at the bottom.

    Suddenly everything worked.

    • Jean

      Hi, i can´t figure out how do change the wp_enqueue_script. I will really appreciate if you can explain that in detail. Thanks!

  14. gabi

    Hello, It doesn’t work for me I have this error message :
    “ Parse error: syntax error, unexpected T_ENDIF in…“…functions.php on line 17

    It means an error on the script from the 3td step. What did I miss ?

  15. werner

    Will you update your post due to the fact that now with 3.9 Masonry3 is in Wordpress core?

  16. Steven Gardner

    The initialization script keeps being called before imagesloaded has been defined so I get

    Uncaught ReferenceError: imagesLoaded is not defined

    How can I make sure imagesLoaded is there first before I start to initialise things?

    • Violacase

      imagesLoaded is called before enqueueing has been established. Give it a low priority so that it is called last, like:

      add_action( ‚wp_footer‘, ’slug_masonry_init‘, 100000 );

      This did the trick for me.

      Nota: I think this article needs to be updated. Not only because of this issue.

      • Chplusink

        Thanks! This is the only solution that worked for me.

  17. Kate

    Thanks for this post. I am trying to set up a blog page with Masonry posts, but I’m snagged at step 1. Whenever I add the functions for adding the two libraries to my functions file, my site goes totally blank. Since I am developing in a subdirectory, I tried to make the paths to the js files absolute rather than relative, but that didn’t help. Any idea what I’m missing?

  18. Angie Lee

    Hi,

    I’m getting this error: „ReferenceError: imagesLoaded is not defined“ please help.

  19. Amitabha Ghosh

    Thanks. It’s a great post and it is working for me. I am doing a template with this code and it is working perfect. But two obstacles I am facing
    1. I want to limit my posts in my index page so that it shows first 6 to 7 posts and below will be a button with „Load More“ feature which when clicked shall load the other posts.

    2. I am trying to integrate infinite scroll javascript of Paul Irish but I couldn’t make it work. Any help??

    Thanks

  20. Ismar Hadzic

    Well I followed all of your steps and I run on fatal error “ PHP Fatal error: Call to undefined function wp_enquqe_style() “ and i still don’t understand why wp_enquqe_style() i don’t understand why can you check that out.

    • AndyM

      Hi

      I was going to comment to point out that it’s a typo and should be:

      wp_enqueue_style

  21. Andre

    Great tutorial…just one thing in step 3…this:

    …has a missing bracket:

  22. Aurélien Denis

    Hi there!

    This post is great start but I found some mistakes…

    1/ You should use the_title_attribute() for the attribute title instead of the title
    2/ add_action( ‚wp_footer‘, ’slug_masonry_exists‘ ); is the correct code and not add_action( ‚wp_footer‘, ’slug_masonry_init‘ );

    Cheers!

    • AndyM

      I’m wondering if

      if ( ! function_exists( ’slug_masonry_init‘ )) :
      function slug_masonry_exists() { ?>

      should be:

      if ( ! function_exists( ’slug_masonry_init‘ )) :
      function slug_masonry_init() { ?>

  23. Ben Racicot

    Can’t get this working with an infinite scroll setup in my $ajax success CB. Any advice would be great.

  24. Tomasz Bystrek

    I was looking for this effect, but I did’t know how it is called and how to search for it, until now. I’ll definitely try it in one of my future project of photo blog. Thanks!

  25. Katrina Moody

    Great post – wish it was around when I started working with Masonry on a theme a few weeks ago :D

    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 ;-)

    I also wrapped the post-thumbnail within an tag so that I could allow it to return to the post permalink (I changed that out to return the media file link so I could implement a lightbox effect – per a client’s request) so visitors could go directly to the post.

    I also added a hover effect to the post-thumbnail to indicate it was clickable :D

    Now I need to pick through what I’ve done and compare it to yours and see what I can improve with your knowledge (love the WordPress community!)

    • Ivan Vilches

      guys all that code is on functions.php ? thanks

Eine Antwort hinterlassen

Danke, dass du einen Kommentar hinterlassen möchtest. Bitte beachte, dass alle Kommentare nach unseren kommentarpolitik moderiert werden und deine E-Mail-Adresse NICHT veröffentlicht wird. Bitte verwende KEINE Schlüsselwörter im Namensfeld. Lass uns ein persönliches und sinnvolles Gespräch führen.