Maison > Article > Tutoriel CMS > Comment épingler des pages d'archives telles que des catégories et des balises WordPress en haut
Comment épingler des pages d'archives telles que des catégories et des balises WordPress en haut ?
L'exemple de cet article décrit comment atteindre le haut des pages d'archives telles que les catégories et les balises WordPress. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :
Recommandation : "tutoriel wordpress"
Dans wordpress, par défaut, seule la page d'accueil peut être utilisée pour épingler les articles en haut. Si nous voulons classer / Les balises et autres pages d'archives peuvent également épingler les articles en haut.
Référez-vous maintenant au code de la page d'accueil épinglée en haut dans wp. -includes/query.php. Avec une légère modification, vous pouvez créer la page de catégorie, la page de balise et la page d'auteur. Les pages d'archives telles que les pages de date peuvent également afficher les articles épinglés dans leur portée en haut, comme la page d'accueil. code suivant dans function.php sous le thème actuel.
Le code est le suivant :
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; }
Description du code :
1 Si vous souhaitez que tous les articles épinglés soient affichés. sur la page d'archive, puis supprimez les lignes 11 à 43 du code ;
2. Si vous ne souhaitez pas afficher les articles épinglés sur une certaine page de catégorie, modifiez le code
sur ligne 3 comme suit :
if( //改成: // abc是分类名称 if ( is_category( 'abc' ) ||
3. Si vous ne souhaitez pas qu'une certaine page à onglet affiche des articles épinglés, modifiez le code sur la ligne 3
Le code est le suivant :
if( //改成: // abc是标签名称 if ( is_tag( 'abc' ) ||
4. Si vous ne souhaitez pas que la page d'un auteur affiche les articles épinglés, modifiez le code
à la ligne 3 comme suit :
if( //改成: // abc是作者昵称 if ( is_author( 'abc' ) ||
5 Le code ci-dessus est uniquement pour The. la boucle principale est valide. Si vous utilisez WP_Query ou query_posts sur la page d'archive pour obtenir la liste des articles, et si vous souhaitez afficher les articles épinglés en haut de ces listes, vous pouvez supprimer le code suivant dans la troisième ligne de code (note). : cela peut faire en sorte que le nombre d'articles affichés soit inférieur à Vos paramètres sont différents) :
Le code est le suivant :
Le code est le suivant :
|| !is_main_query()
Style collé : si vous souhaitez ajouter du style à l'article épinglé, ajoutez le code suivant aux fonctions .php, une classe nommée sticky sera ajoutée à l'article du haut et le code CSS spécifique peut être personnalisé par vous-même :
Le code est le suivant :
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; }
J'espère que cet article sera utile à tout le mondeLa création de sites Web WordPress aide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!