Erstellen eines Quicksand-Portfolios mit WordPress
German (Deutsch) translation by Valentina (you can also view the original English article)
Heute verwandeln Sie Ihr einfaches Portfolio mit der Magie von Quicksand von Razorjack in etwas Erstaunliches.
Einführung
Wollten Sie schon immer das jQuery-Plugin Quicksand verwenden? Haben Sie jemals versucht, es mit WordPress zu implementieren? Aber fanden Sie es ein Albtraum, beides zu tun? Nun, ich werde eine einfache Schritt-für-Schritt-Anleitung durchgehen, um Sie mit Quicksand von einem leeren WordPress-Theme zu einem schönen benutzerdefinierten Portfolio zu führen. Ich werde ein benutzerdefiniertes Theme verwenden, das für die Zwecke dieses Tutorials zusammen mit WordPress 3.0+ entfernt wurde.
Öffnen Sie also Ihren bevorzugten Texteditor und fangen wir an!
Schritt 1 Erstellen Sie einen Beitragstyp
Mit WordPress sind wir in der Lage, benutzerdefinierte Beitragstypen zu erstellen, in denen wir alle unsere Inhalte verwalten können. Wir werden einen benutzerdefinierten Beitragstyp erstellen, um alle unsere Portfolioelemente in einem speziellen Admin-Bereich zu speichern.
Für eine einfache Codeverwaltung erstellen wir zunächst einen Ordner namens portfolio und eine PHP-Datei namens portfolio-post-types.php (oder etwas, das Sie für geeignet halten).
Nachdem Sie eine Datei erstellt haben, fügen wir etwas Code hinzu...
Beginnen wir mit der Erstellung einer Funktion:
1 |
<?php
|
2 |
|
3 |
// function: post_type BEGIN
|
4 |
function post_type() |
5 |
{
|
6 |
// We will fill this function in the next step
|
7 |
} // function: post_type END |
Nachdem wir nun unsere leere Funktion erstellt haben, fügen wir etwas Code hinzu, damit diese Funktion etwas Besonderes macht. Erstellen Sie zunächst die Labels für unseren benutzerdefinierten Beitragstyp. Fügen Sie den folgenden Code in unsere post_type-Funktion ein:
1 |
$labels = array( |
2 |
'name' => __( 'Portfolio'), |
3 |
'singular_name' => __('Portfolio'), |
4 |
'rewrite' => array( |
5 |
'slug' => __( 'portfolio' ) |
6 |
),
|
7 |
'add_new' => _x('Add Item', 'portfolio'), |
8 |
'edit_item' => __('Edit Portfolio Item'), |
9 |
'new_item' => __('New Portfolio Item'), |
10 |
'view_item' => __('View Portfolio'), |
11 |
'search_items' => __('Search Portfolio'), |
12 |
'not_found' => __('No Portfolio Items Found'), |
13 |
'not_found_in_trash' => __('No Portfolio Items Found In Trash'), |
14 |
'parent_item_colon' => '' |
15 |
);
|
Eine Aufschlüsselung des Codes, den wir gerade geschrieben haben:
Die Variable 'labels' ist ein Array von Strings, die Ihren Beitragstyp darstellen. Jeder der Strings ist Text, der für die jeweilige Funktion ausgegeben wird.
-
name
– Die Pluralform des Namens Ihres Beitragstyps. -
singular_name
– Die Singularform des Namens Ihres Beitragstyps. -
rewrite
– Schreibe Permalinks mit diesem Format neu. -
add_new
– Der Menüpunkt zum Hinzufügen eines neuen Beitrags. -
edit_item
– Die Kopfzeile, die beim Bearbeiten eines Beitrags angezeigt wird. -
new_item
– Wird im Favoritenmenü im Admin-Header angezeigt. -
view_item
– Wird neben dem Permalink auf dem Bildschirm zum Bearbeiten von Beiträgen angezeigt. -
search_items
– Schaltflächentext für das Suchfeld auf dem Bildschirm zum Bearbeiten von Beiträgen. -
not_found
– Text, der angezeigt werden soll, wenn durch die Suche im Admin keine Beiträge gefunden werden. -
not_found_in_trash
– Text, der angezeigt werden soll, wenn sich keine Beiträge im Papierkorb befinden. -
parent_item_colon
– Wird als Label für einen übergeordneten Beitrag auf dem Bildschirm zum Bearbeiten von Beiträgen verwendet. Nur sinnvoll für hierarchische Beitragstypen.
Erstellen Sie als Nächstes die Argumente für unseren benutzerdefinierten Beitragstyp. Fügen Sie den folgenden Codeabschnitt in unsere post_type-Funktion ein:
1 |
$args = array( |
2 |
'labels' => $labels, |
3 |
'public' => true, |
4 |
'publicly_queryable' => true, |
5 |
'show_ui' => true, |
6 |
'query_var' => true, |
7 |
'rewrite' => true, |
8 |
'capability_type' => 'post', |
9 |
'hierarchical' => false, |
10 |
'menu_position' => null, |
11 |
'supports' => array( |
12 |
'title', |
13 |
'editor', |
14 |
'thumbnail'
|
15 |
)
|
16 |
);
|
-
labels
– Ein Array von Labels für diesen Beitragstyp. -
public
– Metaargument, das verwendet wird, um Standardwerte für publicly_queriable, show_ui, show_in_nav_menus und exclude_from_search zu definieren. -
publicly_queryable
– Ob Abfragen vom Typ Post vom Frontend aus durchgeführt werden können. -
show_ui
– Ob eine Standardbenutzeroberfläche für die Verwaltung dieses Beitragstyps generiert werden soll. -
query_var
– False, um Abfragen zu verhindern, oder Zeichenfolgenwert der Abfragevariable, die für diesen Beitragstyp verwendet werden soll. -
rewrite
- Permalinks mit diesem Format neu schreiben. -
capability_type
– Die Zeichenfolge, die zum Erstellen der Lese-, Bearbeitungs- und Löschfunktionen verwendet werden soll. -
hierarchical
– Ob der Beitragstyp hierarchisch ist. Ermöglicht die Angabe des übergeordneten Elements. -
menu_position
– Die Position in der Menüreihenfolge, an der der Beitragstyp im Admin erscheinen soll. -
supports
– Ein Alias für den direkten Aufruf von add_post_type_support().
Lesen Sie mehr über add_post_type_support im WordPress-Codex
Jetzt ist unser Beitragstyp mit den Einstellungen eingerichtet, wir müssen den Beitragstyp registrieren. Wir registrieren unseren Beitragstyp, indem wir den folgenden Code in unsere post_type-Funktion einfügen:
1 |
register_post_type(__( 'portfolio' ), $args); |
Ausgabe des benutzerdefinierten Posttyps formatieren
Wir haben jetzt unseren benutzerdefinierten Beitragstyp erstellt. Lassen Sie uns die Ausgabe formatieren, damit wir benutzerfreundliche Nachrichten erhalten. Beginnen Sie damit, eine weitere Funktion in unserer Datei portfolio-post-type.php zu erstellen.
1 |
// function: portfolio_messages BEGIN
|
2 |
function portfolio_messages($messages) |
3 |
{
|
4 |
$messages[__( 'portfolio' )] = |
5 |
array( |
6 |
0 => '', |
7 |
1 => sprintf(('Portfolio Updated. <a href="%s">View portfolio</a>'), esc_url(get_permalink($post_ID))), |
8 |
2 => __('Custom Field Updated.'), |
9 |
3 => __('Custom Field Deleted.'), |
10 |
4 => __('Portfolio Updated.'), |
11 |
5 => isset($_GET['revision']) ? sprintf( __('Portfolio Restored To Revision From %s'), wp_post_revision_title((int)$_GET['revision'], false)) : false, |
12 |
6 => sprintf(__('Portfolio Published. <a href="%s">View Portfolio</a>'), esc_url(get_permalink($post_ID))), |
13 |
7 => __('Portfolio Saved.'), |
14 |
8 => sprintf(__('Portfolio Submitted. <a target="_blank" href="%s">Preview Portfolio</a>'), esc_url( add_query_arg('preview', 'true', get_permalink($post_ID)))), |
15 |
9 => sprintf(__('Portfolio Scheduled For: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Portfolio</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime($post->post_date)), esc_url(get_permalink($post_ID))), |
16 |
10 => sprintf(__('Portfolio Draft Updated. <a target="_blank" href="%s">Preview Portfolio</a>'), esc_url( add_query_arg('preview', 'true', get_permalink($post_ID)))), |
17 |
);
|
18 |
return $messages; |
19 |
|
20 |
} // function: portfolio_messages END |
Wir haben gerade eine Funktion namens portfolio_messages erstellt, die ein Argument namens $messages
akzeptiert. Anschließend erstellen wir eine Variable, die ein Array für alle unsere Nachrichten speichert. Wir lassen "0" in unserem Array leer, weil wir unsere Indizierung bei 1 mit unseren Nachrichten beginnen. Dann endlich unser Array an unsere Funktion zurückgeben.
Taxonomie erstellen
Schließlich müssen wir unsere Taxonomie erstellen. Beginnen Sie mit der Erstellung einer weiteren Funktion namens portfolio_filter und geben Sie den folgenden Code ein:
1 |
// function: portfolio_filter BEGIN
|
2 |
function portfolio_filter() |
3 |
{
|
4 |
register_taxonomy( |
5 |
__( "filter" ), |
6 |
array(__( "portfolio" )), |
7 |
array( |
8 |
"hierarchical" => true, |
9 |
"label" => __( "Filter" ), |
10 |
"singular_label" => __( "Filter" ), |
11 |
"rewrite" => array( |
12 |
'slug' => 'filter', |
13 |
'hierarchical' => true |
14 |
)
|
15 |
)
|
16 |
);
|
17 |
} // function: portfolio_filter END |
Wir beginnen mit der Registrierung unseorer Taxonomie und wenden die Taxonomie dann auf unser prtfolio mit benutzerdefinierten Posttypen an. Anschließend wenden wir die endgültigen Einstellungen der Taxonomie an und geben die erstellten Labels ein. Der Grund, warum wir eine Taxonomie erstellen, ist, dass wir sie beim Sortieren unseres Portfolios mit Quicksand als Referenzschlüssel verwenden.
Nachdem nun unser gesamter benutzerdefinierter Beitragstyp mit der richtigen Formatierung und unserer eigenen Taxonomie abgeschlossen ist, müssen wir endlich unseren gesamten Code initialisieren, damit er im Admin angezeigt wird. Beginnen wir mit dem Hinzufügen des folgenden Codes am Ende unserer Datei:
1 |
add_action( 'init', 'post_type' ); |
2 |
add_action( 'init', 'portfolio_filter', 0 ); |
3 |
add_filter( 'post_updated_messages', 'portfolio_messages' ); |
Nachdem wir dies eingegeben haben, müssen wir unsere Datei functions.php öffnen und die folgende Codezeile einfügen:
1 |
include("portfolio/portfolio-post-types.php"); |
Wir müssen unseren benutzerdefinierten Portfolio-Typ in unsere Datei functions.php aufnehmen, damit das Skript ausgeführt wird, wenn die Funktionen Ihres WordPress-Themen aufgerufen werden. Jetzt sehen Sie in Ihrem Admin-Panel einen Abschnitt mit dem Titel Portfolio mit 3 Unternavigationselementen namens "Portfolio", "Element hinzufügen" und "Filter".
Schritt 2 Portfolioseite erstellen
Jetzt haben wir unsere gesamten Portfolio-Einstellungen abgeschlossen, wir müssen unsere Portfolio-Elemente ausgeben. Wir beginnen dies, indem wir eine neue PHP-Datei namens portfolio.php erstellen. Lassen Sie uns zunächst einige der wesentlichen Elemente für die Erstellung einer Seitenvorlage hinzufügen:
1 |
<?php /* Template Name: Portfolio */ ?> |
2 |
|
3 |
<?php get_header(); ?> |
4 |
|
5 |
<!-- #content BEGIN -->
|
6 |
<div id="content" class="clearfix"> |
7 |
|
8 |
// We will add our content later |
9 |
|
10 |
</div><!-- #content END --> |
11 |
|
12 |
<?php get_footer(); ?> |
Jetzt haben wir unsere grundlegende Seitenvorlage erstellt, die wir zum Auffüllen unseres Portfolios benötigen. Wir müssen zuerst eine Seite erstellen, die als unsere Portfolio-Seite fungiert. Gehen Sie also zu Seiten -> Neu hinzufügen in unserem Dashboard. Auf der rechten Seite sehen Sie ein Feld mit dem Titel Seitenattribute mit einem Dropdown-Menü von Standardvorlage, wählen Sie die gewünschte Vorlage aus, die Sie in unserem Fall-Portfolio verwenden möchten, und wählen Sie dann Veröffentlichen.



Den Filter anzeigen
Kehren wir nun zur Bearbeitung unserer Portfolio-Seitenvorlage zurück und beginnen mit dem Einfügen des Filters für unser Portfolio. Zuerst packen wir den Filter in eine ungeordnete Liste und jede der Kategorien wird ein Element in unserer Liste sein.
1 |
<ul class="filter clearfix"> |
2 |
|
3 |
<li><strong>Filter:</strong></li> |
4 |
<li class="active"><a href="javascript:void(0)" class="all">All</a></li> |
5 |
|
6 |
</ul>
|
Fügen wir unserem Filter etwas PHP hinzu, um automatisch die Filterkategorien zu generieren, die in unserem Portfolio verwendet werden.
1 |
<?php
|
2 |
$terms = get_terms('filter', $args); |
3 |
$count = count($terms); |
4 |
$i=0; |
5 |
if ($count > 0) { |
6 |
foreach ($terms as $term) { |
7 |
$i++; |
8 |
$term_list .= '<li><a href="javascript:void(0)" class="'. $term->slug .'">' . $term->name . '</a></li>'; |
9 |
|
10 |
if ($count != $i) |
11 |
{
|
12 |
$term_list .= ''; |
13 |
}
|
14 |
else
|
15 |
{
|
16 |
$term_list .= ''; |
17 |
}
|
18 |
}
|
19 |
echo $term_list; |
20 |
}
|
21 |
?>
|
Was wir hier tun, ist zunächst die Initialisierung der Taxonomie, die wir erhalten möchten, in unserem Fall-Filter. Zweitens richten Sie mit unseren Kategorien eine Zählung ein, damit wir jedes Element innerhalb unseres Filters erhöhen können, und wenden Sie dann eine bedingte Anweisung an, um zu überprüfen, ob die von uns festgelegte Zählung kleiner als 0 ist; d.h. wenn keine Kategorien im Filter vorhanden sind oder einem Portfolioelement keine Kategorien zugeordnet sind, wird nichts ausgegeben. Wenn unser Filter Kategorien enthält, möchten wir die Ausgabe für jedes Element ändern.
Wir tun dies durch die folgende Zeile in unserem Codesegment:
1 |
$term_list .= '<li><a href="javascript:void(0)" class="'. $term->slug .'">' . $term->name . '</a></li>'; |
Wir erstellen ein Listenelement, das in unsere ungeordnete Liste passt, und setzen dann "href" auf ein leeres Ziel, da Quicksand die Organisation des Inhalts übernimmt, dann setzen wir unseren Klassennamen auf den Slug des Portfolioelements für eine konsistente Referenzierung. und schließlich den Namen der Kategorie innerhalb unserer Filter auszugeben.



Zeigen Sie die Portfolioelemente an
Genial, wir haben jetzt einen dynamischen Filter implementiert. Jetzt werden wir unsere Portfolio-Elemente ausgeben. Beginnen wir mit der Abfrage unserer Datenbank, um alle Beiträge für den Portfolio-Beitragstyp abzurufen und unseren WordPress Loop einzurichten. Wir beginnen damit, ein neues WP_Query-Objekt einzurichten und ihm die richtigen Parameter zu übergeben.
1 |
<?php
|
2 |
$wpbp = new WP_Query(array( |
3 |
'post_type' => 'portfolio', |
4 |
'posts_per_page' =>'-1' |
5 |
)
|
6 |
);
|
7 |
?>
|
Wir weisen unser WP_Query-Objekt einer Variablen zu, damit wir beim Initialisieren unserer Schleife auf unsere Abfrage verweisen können. Wir setzen unseren Beitragstyp auf Portfolio, fragen also nur unseren benutzerdefinierten Beitragstyp ab, den wir zuvor erstellt haben, und setzen schließlich die posts_per_page auf -1. Wir verwenden -1, damit es keine feste Begrenzung der Anzahl der Beiträge pro Seite gibt, daher werden alle Portfolioelemente angezeigt, wenn wir möchten, können wir auch eine beliebige Anzahl eingeben und es würde nur die Anzahl der Portfolioelemente angezeigt, die hier eingegeben wurde.
Da wir nun ein Abfrageobjekt haben, auf das wir verweisen können, richten wir unsere Schleife so ein, dass sie unsere Portfolioelemente ausgibt. Wir beginnen mit dem Einfügen des folgenden Codes:
1 |
<?php if ($wpbp->have_posts()) : while ($wpbp->have_posts()) : $wpbp->the_post(); ?> |
2 |
|
3 |
<?php // All of our portfolio content will be inserted in here... ?> |
4 |
|
5 |
<?php endwhile; endif; ?> |
6 |
<?php wp_reset_query(); ?> |
Bevor wir anfangen, Inhalte in unsere Schleife einzugeben, werden wir unsere vorgestellten Bilder einrichten. Öffnen Sie Ihre Datei functions.php und wir fügen einige benutzerdefinierte Bildgrößen hinzu, die für jedes Portfolioelement ausgegeben werden.
Lassen Sie uns zuerst überprüfen, ob die aktuelle Version von WordPress die Funktion der vorgestellten Bilder unterstützt, und dann einige allgemeine Einstellungen vornehmen, damit sie richtig funktioniert. Wir fügen Unterstützung für Post-Thumbnails hinzu und legen eine Standardgröße von 56 x 56 Pixel fest.
1 |
if ( function_exists( 'add_theme_support' ) ) |
2 |
{
|
3 |
add_theme_support( 'post-thumbnails' ); |
4 |
set_post_thumbnail_size( 56, 56, true ); |
5 |
}
|
Dann möchten wir unsere eigene benutzerdefinierte Miniaturansichtsgröße hinzufügen. Fügen Sie den folgenden Code in eine Zeile darunter ein: set_post_thumbnail_size
1 |
add_image_size( 'portfolio', 295, 150, true ); |
Mit dieser Methode können Sie Ihre eigene Miniaturansichtsgröße erstellen, indem Sie zuerst den Referenznamen für die Miniaturansicht festlegen, dann die Breite und Höhe und schließlich, wenn die Miniaturansicht das Bild hart auf die angegebene Größe zuschneiden soll. Sie können die Größe Ihres vorgestellten Bildes an Ihr Layout anpassen. Mit dem Zweck dieses Tutorials habe ich ein 3-Spalten-Raster-Layout.
Nachdem wir unser vorgestelltes Bild eingerichtet haben, kehren wir zu unserer Portfolioseitenvorlage zurück und geben das vorgestellte Bild des Portfolioelements aus.
Da die Organisation für jedes Portfolioelement am besten durch eine ungeordnete Liste gehandhabt wird, erstellen wir zuerst eine und geben dann unser soeben eingerichtetes vorgestelltes Bild aus. Fügen Sie den folgenden Code in Ihre WordPress-Schleife ein:
1 |
<ul class="filterable-grid clearfix"> |
2 |
<li>
|
3 |
|
4 |
<?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) : ?>
|
5 |
|
6 |
<?php the_post_thumbnail('portfolio'); ?>
|
7 |
|
8 |
<?php endif; ?>
|
9 |
|
10 |
<p><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></p> |
11 |
|
12 |
</li>
|
13 |
</ul>
|
Wir prüfen zunächst, ob das Thema die Thumbnail-Funktion unterstützt. Wenn das Thema diese Funktion unterstützt, wird das vorgestellte Bild in der dedizierten Miniaturansicht ausgegeben, die wir zuvor angegeben haben. Nachdem wir unser vorgestelltes Bild ausgegeben haben, geben wir den Titel des Portfolio-Elements direkt unter dem Bild aus.
Portfolioelemente und Filter verbinden
Wir müssen die verschiedenen Elemente jedes Portfoliolistenelements optimieren, um sicherzustellen, dass die Referenzierung für jedes Portfolio auf die Kategorien korrekt ist, denen das Element zugewiesen ist. Dazu müssen wir zunächst die Kategorien aus unserer Taxonomie abrufen. Fügen Sie den folgenden Code in Ihre Schleife ein:
1 |
<?php $terms = get_the_terms( get_the_ID(), 'filter' ); ?> |
Als nächstes fügen wir unserem Listenelement (li
) einige Attribute hinzu. Wir beginnen damit, dass wir unserem Listenelement eine data-id
hinzufügen, um jedem der Portfolioelemente eine eindeutige Identität zu verleihen. Wir werden auch einen data-type
hinzufügen; dies dient als unsere Referenz zu unserem Filter. Lassen Sie uns unser Eröffnungslistenelement (li
) durch den folgenden Code ersetzen:
1 |
<li data-id="id-<?php echo $count; ?>" data-type="<?php foreach ($terms as $term) { echo strtolower(preg_replace('/\s+/', '-', $term->name)). ' '; } ?>"> |
Wir wenden eine Zählung auf unsere data-id
an, und beim Durchlaufen jedes Elements wird die Zählung erhöht (wir werden die Zählung in Kürze hinzufügen). Wir durchlaufen dann jede Kategorie in unserer Taxonomie und wenden einen regulären Ausdruck an, um die Leerzeichen zu finden, und ersetzen ihn durch ein "-", um dem Slug der Kategorie zu entsprechen, und fügen schließlich ein Leerzeichen am Ende ein, damit wir uns anwenden können mehr als eine Kategorie zu einem Portfolioelement.
Schließlich werden wir sicherstellen, dass wir unsere Anzahl erhöhen und eine eindeutige Referenz zu jedem unserer Portfolioelemente bereitstellen. Wir müssen den folgenden Code hinzufügen, kurz bevor wir die Schleife beenden:
1 |
<?php $count++; ?> |
Endgültiger Code zum Anzeigen des Portfolios
1 |
<ul class="filterable-grid clearfix"> |
2 |
|
3 |
<?php $wpbp = new WP_Query(array( 'post_type' => 'portfolio', 'posts_per_page' =>'-1' ) ); ?> |
4 |
|
5 |
<?php if ($wpbp->have_posts()) : while ($wpbp->have_posts()) : $wpbp->the_post(); ?> |
6 |
|
7 |
<?php $terms = get_the_terms( get_the_ID(), 'filter' ); ?> |
8 |
|
9 |
<li data-id="id-<?php echo $count; ?>" data-type="<?php foreach ($terms as $term) { echo strtolower(preg_replace('/\s+/', '-', $term->name)). ' '; } ?>"> |
10 |
|
11 |
<?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) : ?> |
12 |
|
13 |
<?php the_post_thumbnail('portfolio'); ?> |
14 |
|
15 |
<?php endif; ?> |
16 |
|
17 |
<p><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></p> |
18 |
|
19 |
</li>
|
20 |
|
21 |
<?php $count++; ?> |
22 |
<?php endwhile; endif; ?> |
23 |
<?php wp_reset_query(); ?> |
24 |
|
25 |
</ul>
|
Schritt 3 jQuery und Quicksand
Wir machen jetzt Fortschritte, aber bevor wir fortfahren, müssen wir einige jQuery-Skripte herunterladen. Wir müssen die folgenden Skripte herunterladen:
- jQuery 1.7 (Version enthalten in WordPress 3.3.1)
- Quicksand-Plugin (neueste Version von GitHub)
- Easing Plugin (Version 1.3)
Wir müssen auch eine JavaScript-Datei erstellen, um all unsere benutzerdefinierten jQuery zu verarbeiten, die wir in Kürze schreiben werden. Erstellen wir also eine leere JavaScript-Datei namens jquery.custom.js. Nachdem wir nun alle unsere wesentlichen Skripte haben, öffnen wir unsere functions.php und erstellen eine leere Funktion namens register_js. Sobald wir unsere leere Funktion haben, werden wir unsere Skripte mit den Methoden wp_register_script und wp_enqueue_script einfügen. Zuerst müssen wir überprüfen, dass wir nicht im Admin sind, um sicherzustellen, dass die Skripte nur im Frontend geladen werden. Fügen Sie den folgenden Code in unsere Funktion ein:
1 |
// Register our scripts
|
2 |
function register_js() |
3 |
{
|
4 |
if ( !is_admin() ) |
5 |
{
|
6 |
wp_register_script( 'quicksand', get_template_directory_uri() . '/js/jquery.quicksand.js', 'jquery' ); |
7 |
|
8 |
wp_register_script( 'easing', get_template_directory_uri() . '/js/jquery.easing.1.3.js', 'jquery' ); |
9 |
|
10 |
wp_register_script( 'custom', get_template_directory_uri() . '/js/jquery.custom.js', 'jquery', '1.0', true ); |
11 |
|
12 |
wp_enqueue_script( 'jquery' ); |
13 |
wp_enqueue_script( 'quicksand' ); |
14 |
wp_enqueue_script( 'easing' ); |
15 |
wp_enqueue_script( 'custom' ); |
16 |
}
|
17 |
}
|
Zuerst geben wir mit wp_register_script ein Handle als erstes Argument als Referenz beim Einreihen der Skripte an, dann fügen wir als zweites Argument den Quelllink zum Skript hinzu (dies gilt für jede Registrierung eines Skripts). Wir geben auch jquery als Abhängigkeit an, um die in WordPress enthaltene Version von jQuery zu laden, wenn wir das Skript in die Warteschlange stellen.
Nachdem wir alle unsere Skripte registriert haben, reihen wir sie mit wp_enqueue_script in die Warteschlange ein. Wir übergeben alle Handles, die wir bei der Registrierung verwendet haben, als Referenz, um unsere Skripte in die Warteschlange einzureihen. Schließlich müssen wir unsere Funktion initialisieren, indem wir den folgenden Code in unsere Datei functions.php einfügen:
1 |
add_action('init', 'register_js'); |
Quicksand schreiben
Nachdem wir nun alle unsere Skripte eingerichtet haben, können wir damit beginnen, unser benutzerdefiniertes jQuery-Skript für die Handhabung von Quicksand zu schreiben. Öffnen wir unser jquery.custom.js-Skript und richten wir die Umgebung ein, indem wir den folgenden Code einfügen:
1 |
jQuery(document).ready(function() { |
2 |
|
3 |
// We will insert our quicksand script in here |
4 |
|
5 |
}); // END OF DOCUMENT |
Jetzt haben wir unsere Skriptstruktur, wir erstellen eine Funktion namens portfolio_quicksand und führen sie nur aus, wenn das Quicksand-Plugin existiert.
1 |
function portfolio_quicksand() { |
2 |
|
3 |
// All of our quicksand handling will happen in this function |
4 |
|
5 |
} |
6 |
|
7 |
if(jQuery().quicksand) { |
8 |
|
9 |
portfolio_quicksand(); |
10 |
|
11 |
} |
Ich werde das Folgende in kleinere Schritte unterteilen, damit Sie alles verstehen, was beim Erstellen eines Quicksand-Portfolios passiert. Beginnen wir mit der Einrichtung unserer Variablen. Fügen Sie den folgenden Code in unsere portfolio_quicksand-Funktion ein:
1 |
var $filter; |
2 |
var $container; |
3 |
var $containerClone; |
4 |
var $filterLink; |
5 |
var $filteredItems; |
Wir werden diese Variablen häufiger verwenden, daher ist es immer eine gute Möglichkeit, eine solide Grundlage für die Einrichtung von Variablen zu schaffen. Als nächstes werden wir unsere Variablen zuweisen:
1 |
$filter = $('.filter li.active a').attr('class'); |
2 |
$filterLink = $('.filter li a'); |
3 |
$container = $('ul.filterable-grid'); |
4 |
$containerClone = $container.clone(); |
Wir richten unseren Filter zuerst auf die ungeordnete Listenklasse aus unserer Portfolioseitenvorlage ein. Zweitens richten wir einen filterLink ein; dies wird als unser angeklickter Artikel in unserem Filter fungieren. Dann müssen wir unseren Container unserer Portfolioelemente zuweisen und schließlich benötigen wir eine geklonte Version unseres Containers, um die Daten mit Quicksand zu manipulieren.
Als Nächstes werden wir unsere Klickfunktion schreiben. Wenn ein Benutzer eine Kategorie auswählt, sollte der Container manipuliert und die Ausgabe des Inhalts angezeigt werden. Beginnen wir mit dem Aufruf einer Klickfunktion auf unserem filterLink:
1 |
$filterLink.click(function(e) { |
2 |
|
3 |
// We will add the content for this function now... |
4 |
|
5 |
}); |
Lassen Sie uns nun den aktiven Zustand des Listenelements behandeln. Wir beginnen damit, dass wir zuerst jede Klasse mit einem aktuellen aktiven Status entfernen, dann den Filter durchsuchen und den Filter in separate Elemente aufteilen und schließlich eine aktive Klasse auf das angeklickte Element (Kategorie) anwenden:
1 |
$('.filter li').removeClass('active'); |
2 |
|
3 |
$filter = $(this).attr('class').split(' '); |
4 |
|
5 |
$(this).parent().addClass('active'); |
Dies hilft beim Gestalten Ihres Filters, da Sie aktive Zustände bereitstellen können, wenn ein Benutzer eine Kategorie ausgewählt hat.
Im Folgenden werden wir eine Bedingung für die Filterung unserer Daten behandeln. Wir prüfen zunächst, ob alle ausgewählt wurden. Wenn alle ausgewählt wurde, zeigen Sie alle Elemente innerhalb unseres Containers an, andernfalls zeigen Sie die Elemente innerhalb des Containers an, die durch den Filter ausgewählt wurden.
Wenn wir zuvor unsere Portfolioseitenvorlage erstellt und jedem unserer Portfolioelemente einen data-type
zugewiesen haben, verwenden wir ihn hier als Referenzschlüssel, um unsere ausgewählten Daten zu finden.
1 |
if ($filter == 'all') { |
2 |
$filteredItems = $containerClone.find('li'); |
3 |
} |
4 |
else { |
5 |
$filteredItems = $containerClone.find('li[data-type~=' + $filter + ']'); |
6 |
} |
Schließlich rufen wir die Quicksand-Methode auf und übergeben unsere filteredItems und alle unsere Animationsoptionen:
1 |
$container.quicksand($filteredItems, |
2 |
{ |
3 |
duration: 750, |
4 |
easing: 'easeInOutCirc', |
5 |
adjustHeight: 'dynamic' |
6 |
}); |
Endgültiger Code für unseren Quicksand
1 |
function portfolio_quicksand() { |
2 |
|
3 |
// Setting up our variables |
4 |
var $filter; |
5 |
var $container; |
6 |
var $containerClone; |
7 |
var $filterLink; |
8 |
var $filteredItems |
9 |
|
10 |
// Set our filter |
11 |
$filter = $('.filter li.active a').attr('class'); |
12 |
|
13 |
// Set our filter link |
14 |
$filterLink = $('.filter li a'); |
15 |
|
16 |
// Set our container |
17 |
$container = $('ul.filterable-grid'); |
18 |
|
19 |
// Clone our container |
20 |
$containerClone = $container.clone(); |
21 |
|
22 |
// Apply our Quicksand to work on a click function |
23 |
// for each of the filter li link elements |
24 |
$filterLink.click(function(e) |
25 |
{ |
26 |
// Remove the active class |
27 |
$('.filter li').removeClass('active'); |
28 |
|
29 |
// Split each of the filter elements and override our filter |
30 |
$filter = $(this).attr('class').split(' '); |
31 |
|
32 |
// Apply the 'active' class to the clicked link |
33 |
$(this).parent().addClass('active'); |
34 |
|
35 |
// If 'all' is selected, display all elements |
36 |
// else output all items referenced by the data-type |
37 |
if ($filter == 'all') { |
38 |
$filteredItems = $containerClone.find('li'); |
39 |
} |
40 |
else { |
41 |
$filteredItems = $containerClone.find('li[data-type~=' + $filter + ']'); |
42 |
} |
43 |
|
44 |
// Finally call the Quicksand function |
45 |
$container.quicksand($filteredItems, |
46 |
{ |
47 |
// The duration for the animation |
48 |
duration: 750, |
49 |
// The easing effect when animating |
50 |
easing: 'easeInOutCirc', |
51 |
// Height adjustment set to dynamic |
52 |
adjustHeight: 'dynamic' |
53 |
}); |
54 |
}); |
55 |
} |
Schritt 4 Lightbox-Integration (zusätzliches Extra)
Erstaunlich richtig, Sie sollten jetzt ein voll funktionsfähiges Quicksand-Portfolio haben, aber lassen Sie uns nicht damit aufhören. Ich werde ein zusätzliches Extra hinzufügen, dies ist völlig optional, aber es könnte ein beliebtes Feature werden, und das ist Lightbox. Wir werden das jQuery-Plugin namens PrettyPhoto für unsere Lightbox-Integration verwenden.
Als erstes laden wir das PrettyPhoto-Plugin herunter.
- PrettyPhoto v3 (oder neueste Version)
Sobald wir unsere PrettyPhoto-Dateien heruntergeladen haben, kopieren wir zuerst die PrettyPhoto-Bilder, die sich im Bilder-Ordner befinden, und dann müssen Sie den Ordner mit dem Titel PrettyPhoto in unser Design kopieren. Wir müssen auch die CSS- und die JavaScript-Datei von PrettyPhoto kopieren, also kopieren wir sie in die entsprechenden Ordner in unserem Design.
Nachdem wir nun alle unsere Dateien an Ort und Stelle haben, müssen wir sie in unserem Thema initialisieren. In unserer Datei functions.php werden wir eine weitere Funktion erstellen, um unsere Stile zu handhaben, und wir nennen diese Funktion register_css. Dann registrieren wir unsere Stile und reihen unsere Stile in die Warteschlange ein, fügen also den folgenden Code in Ihre Datei functions.php ein:
1 |
// Register our styles
|
2 |
function register_css() |
3 |
{
|
4 |
if (!is_admin()) { |
5 |
wp_register_style( 'prettyPhoto', get_template_directory_uri() . '/css/prettyPhoto.css' ); |
6 |
wp_enqueue_style( 'prettyPhoto' ); |
7 |
}
|
8 |
}
|
9 |
|
10 |
add_action( 'init', 'register_css' ); |
Wir haben alle unsere Dateien an Ort und Stelle und sie werden durch unser Thema initialisiert. Jetzt müssen wir dies nutzen und Lightbox in unser Theme implementieren. Öffnen wir unsere portfolio.php (Portfolioseitenvorlage) und fügen wir unserem vorgestellten Bild etwas Code hinzu.
Zuerst müssen wir ein großes Bild des eingestellten vorgestellten Bildes erhalten. Dies wird dann als Vollbild fungieren, wenn der Benutzer auf das Bild klickt und PrettyPhoto geladen wird. In unseren WordPress Loop müssen wir den folgenden Code einfügen:
1 |
<?php
|
2 |
$large_image = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), 'fullsize', false, '' ); |
3 |
$large_image = $large_image[0]; |
4 |
?>
|
Der von uns eingefügte Code findet den aktuellen Beitrag innerhalb der Schleife und findet die Originalquelle des Bildes und dann die Vollversion des Bildes. Sobald wir unser Bild in voller Größe zurückgegeben haben, erzwingen wir, dass das Bild im Array-Index von 0 gespeichert wird. Dies wird für keine Überschreibungen oder Duplikate mit unseren Bildern in voller Größe verwendet.
Sobald wir auf unser Bild in voller Größe zugreifen können, werden wir PrettyPhoto auf unserem vorgestellten Bild initialisieren. Der folgende Code verknüpft das Bild in voller Größe mit dem vorgestellten Bild des Portfolio-Elements und übergibt den Verweis an PrettyPhoto. Ersetzen Sie den Code, in dem Sie Ihr vorgestelltes Bild erstellt haben, durch den folgenden:
1 |
<a rel="prettyPhoto[gallery]" href="<?php echo $large_image ?>"><?php the_post_thumbnail('portfolio'); ?></a> |
Großartig, wir haben alle unsere Dateien und Skripte an Ort und Stelle, wir haben das Bild in voller Größe für unser vorgestelltes Bild und wir haben unser vorgestelltes Bild mit PrettyPhoto auf unser Bild in voller Größe verwiesen. Als nächstes müssen wir unser JavaScript schreiben, damit die Lightbox erscheint und funktioniert.
Kehren wir zu unserer Datei jquery.custom.js zurück und erstellen eine weitere leere Funktion, um unser PrettyPhoto zu verarbeiten:
1 |
function lightbox() { |
2 |
|
3 |
// Our Lightbox functioning will be added now... |
4 |
|
5 |
} |
6 |
|
7 |
if(jQuery().prettyPhoto) { |
8 |
lightbox(); |
9 |
} |
Nachdem wir nun unsere Funktion haben, werden wir PrettyPhoto initialisieren. Wir tun dies, indem wir den folgenden Code in unsere Lightbox-Funktion einfügen:
1 |
jQuery("a[rel^='prettyPhoto']").prettyPhoto({ |
2 |
animationSpeed:'fast', |
3 |
slideshow:5000, |
4 |
theme:'pp_default', |
5 |
show_title:false, |
6 |
overlay_gallery: false, |
7 |
social_tools: false |
8 |
}); |
Die vollständige Dokumentation aller Parameter, die PrettyPhoto bei der Verwendung des Plugins akzeptiert, finden Sie unter: PrettyPhoto jQuery Lightbox Clone
Es ist also alles erledigt! Lightbox-Implementierung in Ihr WordPress-Thema, aber warten Sie, lassen Sie mich raten, wenn Sie auf den Filter klicken und Quicksand verwenden; die Lightbox funktioniert nicht mehr. Das liegt daran, dass wir unser Quicksand-Skript ändern und noch ein kleines Stück Code übergeben müssen, um sicherzustellen, dass Lightbox auch dann funktioniert, wenn wir unser Portfolio durchsuchen.
Beheben wir dieses kleine Problem, indem wir das folgende Skript zu unserer portfolio_quicksand-Funktion in unserer Datei jquery.custom.js hinzufügen:
1 |
$container.quicksand($filteredItems, |
2 |
function () { lightbox(); } |
3 |
); |
Was wir hier tun, ist das Quicksand-Plugin noch einmal aufzurufen und eine Funktion innerhalb dieses Aufrufs an unsere Lightbox-Funktion zu übergeben. Jedes Mal, wenn Quicksand den Inhalt filtert, wird die Lightbox-Funktion aufgerufen, die PrettyPhoto auf jedes Bild anwendet.
Schritt 5 Paginierungsintegration (zusätzliches Extra)
Viele Leute lieben es, Quicksand zu verwenden, aber einige Leute mögen die Verwendung von Quicksand und Paginierung in ihren Portfolios. Dies ist ein weiteres zusätzliches Extra, um eine Paginierung in Ihrem Portfolio zu erstellen. Ich werde das WordPress-Plugin verwenden: WP_PageNavi.
Lassen Sie uns zuerst das Plugin installieren und aktivieren. Gehen Sie zur Seite Plugins -> Neu hinzufügen in unserem Admin-Bereich und suchen Sie nach WP_PageNavi, klicken Sie nach der Installation auf Jetzt installieren und Plugin aktivieren, sobald es installiert ist.






Nachdem wir unser Plugin eingerichtet haben, öffnen wir unsere Portfolioseitenvorlage und nehmen einige Änderungen an unserer Datei vor.
Zuerst müssen wir unsere Seite so einrichten, dass die Paginierung zugelassen wird. Wir tun dies, indem wir das folgende Codesegment einfügen, bevor wir unsere Datenbank abfragen:
1 |
$paged = get_query_var('paged') ? get_query_var('paged') : 1; |
Sobald wir unsere Paginierung initialisiert haben, müssen wir die Datenbankabfrage ändern. Wir ändern post_per_page in eine Zahl, um eine maximale Anzahl von Beiträgen anzuzeigen, die auf jeder Seite angezeigt werden. Dann übergeben wir einen neuen Parameter an unsere ausgelagerte Abfrage und verweisen diesen auf unser Codesegment, das es uns ermöglichte, die Seite zu paginieren, wie der folgende Code zeigt:
1 |
$wpbp = new WP_Query(array( 'post_type' => 'portfolio', 'posts_per_page' =>'2', 'paged' => $paged ) ); |
Toll, wir haben ein Portfolio mit Paginierung. Wir brauchen nur einige Steuerelemente, die uns bei der Navigation auf jeder Seite helfen. Der folgende Code prüft, ob das WP_PageNavi-Plugin installiert ist und initialisiert dann das wp_pagenavi mit der als Parameter übergebenen Abfrage der Datenbank. Wir setzen dann unsere Postdaten zurück und alle Inhalte sind korrekt paginiert.
1 |
<?php
|
2 |
if(function_exists('wp_pagenavi')) |
3 |
{
|
4 |
wp_pagenavi(array( 'query' => $wpbp ) ); |
5 |
wp_reset_postdata(); |
6 |
}
|
7 |
?>
|
Das ist es! Sie haben ein voll funktionsfähiges Portfolio mit Quicksand, Lightbox und Pagination.
Abschluss
Geben Sie sich selbst einen Klaps auf die Schulter! Sie haben erfolgreich ein Quicksand-Portfolio mit WordPress erstellt. Die ganze harte Arbeit ist getan und Sie können sie mit jeder Arbeit, die Sie entwickeln, implementieren.
Ich möchte Ihnen ein großes Dankeschön sagen, dass Sie sich die Zeit genommen haben, mein Tutorial zu lesen, ich hoffe, es hat geholfen. Bitte zögern Sie nicht, Kommentare zu hinterlassen, und ich werde mein Bestes geben, um sie zu unterstützen und zu beantworten.