分页存档页面上的WordPress粘帖

我有正在重新分配到archieve.php的类别页面。

你可以在这里看到:https://www.dealfinder.lk/category/dining/
顶部有两个粘性帖子。
1)使用COMBANK卡在&Co Pub and Kitchen享受高达25%的折扣
2)所有汇丰信用卡均可在Robata –科伦坡瑞享酒店20%的折扣
我的分页是每个帖子10个项目
现在, 它向我显示每个帖子12个项目。
这是我的代码:
function yell_category_sticky_posts( $posts, $wp_query ) {global $wp_the_query; // Don't continue if this isn't a category query, we're not in the main query or we're in the admin if ( ! $wp_query-> is_category || $wp_query !== $wp_the_query || is_admin() ) return $posts; global $wpdb; $q = $wp_query-> query_vars; $page = absint( $q['paged'] ); if ( empty( $page ) ) $page = 1; $post_type = $q['post_type']; $sticky_posts = get_option( 'sticky_posts' ); if ( $wp_query-> is_category & & $page < = 1 & & is_array( $sticky_posts ) & & !empty( $sticky_posts ) & & ! $q['ignore_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] ); }}// If any posts have been excluded specifically, Ignore those that are sticky. if ( !empty( $sticky_posts ) & & !empty( $q['post__not_in'] ) ) $sticky_posts = array_diff( $sticky_posts, $q['post__not_in'] ); // Fetch sticky posts that weren't in the query results if ( !empty( $sticky_posts ) ) {$stickies__in = implode( ', ', array_map( 'absint', $sticky_posts )); // honor post type(s) if not set to any $stickies_where = ''; if ( 'any' != $post_type & & '' != $post_type ) {if ( is_array( $post_type ) ) $post_types = join( "', '", $post_type ); else $post_types = $post_type; $stickies_where = "AND $wpdb-> posts.post_type IN ('" . $post_types . "')"; }$stickies = $wpdb-> get_results( "SELECT wp_posts.* FROM $wpdb-> posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1AND ( wp_term_relationships.term_taxonomy_id IN (" . get_term( $wp_query-> query_vars['cat'], 'category' )-> term_taxonomy_id . ") ) AND $wpdb-> posts.ID IN ($stickies__in) $stickies_where" ); foreach ( $stickies as $sticky_post ) {// Ignore sticky posts are not published. if ( 'publish' != $sticky_post-> post_status ) continue; array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) ); $sticky_offset++; } } }return $posts; } add_filter( 'the_posts', 'yell_category_sticky_posts', 10, 2 );

我的问题:
我想每页显示10条帖子, 目前每页显示12条带有粘性帖子的帖子。
这个问题是针对硕士而不是针对新学习者的。
这里有人高手吗?提前致谢
#1正如我在评论中建议的那样, 将” 粘性帖子” 保存在meta中(假设is_featured_post作为” 元密钥” )。
仅运行一次以设置现有帖子的元值。你可以跳过此步骤, 因为你已经保存了元数据。
// set meta value of all posts to 0 $all_posts = get_posts(array('post_type'=> 'post', 'posts_per_page'=> -1)); if( is_array( $all_posts ) ) { foreach( $all_posts as $post ) { update_post_meta( $post-> ID, 'is_featured_post', '0'); } }// set meta value of all sticky posts alone to 1 $sticky_posts = get_option( 'sticky_posts' ); if( is_array( $sticky_posts ) ) { foreach ( $sticky_posts as $sticky_post ) { update_post_meta( $sticky_post, 'is_featured_post', '1'); } }

每次更新帖子(或保存新帖子)时, 以下函数都会更新新的粘性元is_featured_post。
function save_sticky_meta( $post_id ) { if ( isset( $_REQUEST['sticky'] ) ) { update_post_meta( $post_id, 'is_featured_post', '1'); } else { update_post_meta( $post_id, 'is_featured_post', '0'); } } add_action( 'save_post', 'save_sticky_meta' ); add_action( 'edit_post', 'save_sticky_meta' );

然后使用pre_get_posts操作设置类别查询。我们按” 元” 和” 日期” 降序排列以在顶部显示最新的。
function include_sticky_posts( $query ) { if ( ! is_admin() & & $query-> is_main_query() & & $query-> is_category() ) { $query-> set( 'meta_key', 'is_featured_post' ); $query-> set( 'sticky_sort', true ); //custom sticky order query $query-> set( 'orderby', 'meta_value_num date' ); $query-> set( 'order', 'DESC' ); } } add_action( 'pre_get_posts', 'include_sticky_posts' );

如果要随机化非粘性帖子, 请使用the_posts过滤器更改顺序, 如下所示。
add_filter( 'the_posts', 'sticky_posts_sort', 10, 2 ); function sticky_posts_sort( $posts, $query ) { // if custom sort set from category query if ( true !== $query-> get( 'sticky_sort' ) ) return $posts; // loop through posts & save sticky & other posts in seperate arrays $sticky_posts = get_option( 'sticky_posts' ); $sticky_array = array(); $posts_array = array(); foreach ( $posts as $p ) { if( in_array( $p-> ID, $sticky_posts ) ) $sticky_array[] = $p; else $posts_array[] = $p; }// merge both arrays and randomize non-sticky posts alone if( is_array( $posts_array ) ) shuffle( $posts_array ); if( is_array( $sticky_array ) & & is_array( $posts_array ) ) $posts = array_merge( $sticky_array, $posts_array ); elseif( is_array( $sticky_array ) ) $posts = $sticky_array; else $posts = $posts_array; return $posts; }

#2【分页存档页面上的WordPress粘帖】下面的功能将便利贴推到顶部, 你应该可以使用此功能为你提供帮助。
add_filter('the_posts', 'bump_sticky_posts_to_top'); function bump_sticky_posts_to_top($posts) { $stickies = array(); foreach($posts as $i => $post) { if(is_sticky($post-> ID)) { $stickies[] = $post; unset($posts[$i]); } } return array_merge($stickies, $posts); }

    推荐阅读