Wie hefte ich Archivseiten wie WordPress-Kategorien und -Tags oben an?
Das Beispiel in diesem Artikel beschreibt, wie Sie den oberen Rand von Archivseiten wie WordPress-Kategorien und -Tags erreichen. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Empfehlung: „WordPress-Tutorial“
In WordPress kann standardmäßig nur die Homepage Artikel anheften Wenn wir /Tag und andere Archivseiten klassifizieren möchten, benötigen wir eine sekundäre Entwicklung.
Beziehen Sie sich nun auf den Code der oben angehefteten Homepage in wp-includes/. query.php. Mit einer geringfügigen Änderung können Sie festlegen, dass die Kategorieseite, die Tag-Seite und die Autorenseite auch angeheftete Artikel in ihrem Bereich oben anzeigen können, wie auf der Startseite
Der Code lautet wie folgt:
add_filter('the_posts', 'putStickyOnTop' ); function putStickyOnTop( $posts ) { if(is_home() || !is_main_query() || !is_archive()) return $posts; global $wp_query; $sticky_posts = get_option('sticky_posts'); if ( $wp_query->query_vars['paged'] <= 1 && is_array($sticky_posts) && !emptyempty($sticky_posts) && !get_query_var('ignore_sticky_posts') ) { $stickies1 = get_posts( array( 'post__in' => $sticky_posts ) ); foreach ( $stickies1 as $sticky_post1 ) { // 判断当前是否分类页 if($wp_query->is_category == 1 && !has_category($wp_query->query_vars['cat'], $sticky_post1->ID)) { // 去除不属于本分类的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } if($wp_query->is_tag == 1 && has_tag($wp_query->query_vars['tag'], $sticky_post1->ID)) { // 去除不属于本标签的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } if($wp_query->is_year == 1 && date_i18n('Y', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) { // 去除不属于本年份的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } if($wp_query->is_month == 1 && date_i18n('Ym', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) { // 去除不属于本月份的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } if($wp_query->is_day == 1 && date_i18n('Ymd', strtotime($sticky_post1->post_date))!=$wp_query->query['m']) { // 去除不属于本日期的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } if($wp_query->is_author == 1 && $sticky_post1->post_author != $wp_query->query_vars['author']) { // 去除不属于本作者的文章 $offset1 = array_search($sticky_post1->ID, $sticky_posts); unset( $sticky_posts[$offset1] ); } } $num_posts = count($posts); $sticky_offset = 0; // Loop over posts and relocate stickies to the front. for ( $i = 0; $i < $num_posts; $i++ ) { if ( in_array($posts[$i]->ID, $sticky_posts) ) { $sticky_post = $posts[$i]; // Remove sticky from current position array_splice($posts, $i, 1); // Move to front, after other stickies array_splice($posts, $sticky_offset, 0, array($sticky_post)); // Increment the sticky offset. The next sticky will be placed at this offset. $sticky_offset++; // Remove post from sticky posts array $offset = array_search($sticky_post->ID, $sticky_posts); unset( $sticky_posts[$offset] ); } } // If any posts have been excluded specifically, Ignore those that are sticky. if ( !emptyempty($sticky_posts) && !emptyempty($wp_query->query_vars['post__not_in'] ) ) $sticky_posts = array_diff($sticky_posts, $wp_query->query_vars['post__not_in']); // Fetch sticky posts that weren't in the query results if ( !emptyempty($sticky_posts) ) { $stickies = get_posts( array( 'post__in' => $sticky_posts, 'post_type' => $wp_query->query_vars['post_type'], 'post_status' => 'publish', 'nopaging' => true ) ); foreach ( $stickies as $sticky_post ) { array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) ); $sticky_offset++; } } } return $posts; }
Codebeschreibung:
1. Wenn Sie möchten, dass alle angehefteten Artikel im Archiv angezeigt werden Seite, dann löschen Sie die Zeilen 11-43 des Codes.
2 Wenn Sie angeheftete Artikel nicht auf einer bestimmten Kategorieseite anzeigen möchten, ändern Sie den Code
in Zeile 3 folgt:
if( //改成: // abc是分类名称 if ( is_category( 'abc' ) ||
3. Wenn Sie nicht möchten, dass auf einer bestimmten Registerkarte angeheftete Artikel angezeigt werden, ändern Sie den Code in Zeile 3
Der Code lautet wie folgt:
if( //改成: // abc是标签名称 if ( is_tag( 'abc' ) ||
4. Wenn Sie nicht möchten, dass auf der Seite eines Autors angeheftete Artikel angezeigt werden, ändern Sie den
-Code in Zeile 3 wie folgt:
if( //改成: // abc是作者昵称 if ( is_author( 'abc' ) ||
5. Der obige Code gilt nur für die Hauptschleife gültig. Wenn Sie WP_Query oder query_posts auf der Archivseite verwenden, um die Artikelliste abzurufen, und wenn Sie angeheftete Artikel oben in diesen Listen anzeigen möchten, können Sie den folgenden Code in der dritten Codezeile löschen (Hinweis: Möglicherweise Dies führt dazu, dass die Anzahl der angezeigten Artikel geringer ist als Ihre Einstellungen sind unterschiedlich):
Der Code lautet wie folgt:
Der Code lautet wie folgt:
|| !is_main_query()
Eingeklebter Stil: Wenn Sie dem angehefteten Artikel Stil verleihen möchten, fügen Sie den folgenden Code zu den Funktionen .php hinzu. Dem oberen Artikel wird eine Klasse mit dem Namen sticky hinzugefügt, und der spezifische CSS-Code kann von Ihnen selbst angepasst werden:
The Der Code lautet wie folgt:
add_filter('post_class', 'addStickyClass' ,10,3 ); function addStickyClass( $classes, $class, $post_id ){ if( is_sticky() && is_category() && !isset( $classes['sticky'] ) ){ $classes[] = 'sticky'; } return $classes; }
Ich hoffe, dieser Artikel wird für alle hilfreich seinWordPress-Website-Erstellunghilft.
Das obige ist der detaillierte Inhalt vonSo pinnen Sie Archivseiten wie WordPress-Kategorien und -Tags oben an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!