!
也想出现在这里? 联系我们
广告位

在WordPress分类档案页面显示该分类置顶文章

默认WordPress仅在首页显示置顶文章,那么要在分类档案页面显示该分类置顶文章,如何实现呢?可以尝试使用下面的代码

将代码添加到当前主题函数模板 functions.php 中:

class StickyInCategory {
	/**
	 * A reference to an instance of this class.
	 */
	private static $instance;
 
	/**
	 * The array of categories that will have sticky posts moved to the top.
	 */
	protected $categories;
    
	/**
	 * Returns an instance of this class. 
	 */
	public static function get_instance() {
 
		if ( null == self::$instance ) {
			self::$instance = new StickyInCategory();
		}
 
		return self::$instance;
 
	}
 
	/**
	 * Initializes the plugin by setting filters and administration functions.
	 */
	private function __construct() {
 
		$this->categories = array();
 
		// Filter retrieved posts
		add_filter(	'the_posts', array( $this, 'prepend_sticky_posts' ), 10, 2 );
		
		// Set the 'sticky' class
		add_filter( 'post_class', array( $this, 'set_sticky_post_class' ), 10, 3 );
	}
 
	/**
	 * Move sticky posts to the top of the archive listing.
	 */
	public function prepend_sticky_posts( $posts, $query ) {
 
		if ( !is_admin() && is_main_query() ) {
			
			// Hook to initialise the categories if none specified.
			if ( empty( $this->categories ) ) {
				$this->categories = apply_filters( 'sia_sticky_categories', $this->categories );
			}
 
			// Only continue if we are viewing a category archive.
			if ( array_key_exists( 'category_name', $query->query_vars ) ) {
				$category_matched = false;
				if ( empty( $this->categories ) ) {
					// If no categories were supplied by the apply_filters() then operate on all categories.
					$category_matched = true;
				}
				else {
					// Check whether the current category is in the list.
					$category_matched = in_array( $query->query_vars['category_name'], $this->categories );
				}
 
				if ( $category_matched ) {
					// Copied from the bottom of WP_Query::get_posts() in wp-includes/class-wp-query.php
					$sticky_posts = get_option( 'sticky_posts' );
					$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 ] );
						}
					}
				}
			}
		}
		return $posts;
	}
 
	/**
	 * Set the 'sticky' post class. get_post_class() only does it on the home page.
	 */
	public function set_sticky_post_class( $classes, $class, $post_ID ) {
		
		// TODO: Consider whether to reference $this->categories.
		if ( is_archive() && is_sticky( $post_ID ) ) {
			$classes[] = 'sticky';
		}
		return $classes;
	}
}
 
add_action( 'after_setup_theme', array( 'StickyInCategory', 'get_instance' ) );

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress获取指定时间段内的文章

2024-12-20 11:39:38

WordPress教程

查看WordPress文章是否有特色图片

2025-1-3 15:07:37

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索