【发布时间】:2019-03-05 04:14:30
【问题描述】:
我有重定向到 archieve.php 的类别页面。
顶部有两个置顶帖。
1) 使用 COMBANK 卡在 &Co Pub and Kitchen 享受高达 25% 的折扣
2) 在 Robata – Movenpick Hotel Colombo,所有 HSBC 信用卡均可享受 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=1 AND ( 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 个帖子 每页带有置顶帖。
这个问题是给大师的,不是给新手的。
这里有高手吗?提前致谢
【问题讨论】:
-
这个老插件的源代码没有提供任何解决方案? de.wordpress.org/plugins/category-sticky-post
-
这将非常复杂,除非您将“粘性帖子”保存在元数据中,使用该键进行查询并按其值排序(已在 wordpress.org/ideas/topic/… 中提出)。
-
@OutsourceWordPress 感谢您的回复。我已经使用了“单选按钮”元键(is_featured_post)。有单选按钮作为两个值(1 和 0)。它按照查询文档工作。我获取了 calue 1 和 0 的帖子。但我想随机发布设置为“0”的帖子。希望你能理解我的问题。
-
好的,我会为您更新解决方案。
标签: php wordpress wordpress-theming