چگونه صفحه دسته/برچسب/نویسنده وردپرس را مقالات چسبناک نشان دهیم؟

وردپرس یک ویژگی داخلی برای پین کردن پست‌ها دارد، اما به طور پیش‌فرض فقط پست‌های پین‌شده را در صفحه اصلی نمایش می‌دهد.

سایر صفحات آرشیو (مانند صفحات دسته، صفحات برچسب، صفحات نویسنده و صفحات تاریخ) نمی توانند مقالات چسبنده را در بالا نمایش دهند، فقط به ترتیب پیش فرض.

بسیاری از افرادی که از وردپرس برای سئو استفاده می‌کنند ، امیدوارند این مشکلات را حل کنند.

چگونه صفحه دسته/برچسب/نویسنده وردپرس را مقالات چسبناک نشان دهیم؟

در واقع، فقط باید به کد صفحه اصلی wp-includes/query.php مراجعه کرده و کمی آن را اصلاح کنیم، به طوری که بالای صفحه آرشیو (مانند صفحه دسته، صفحه برگه، صفحه نویسنده و صفحه تاریخ) ) همچنین می تواند مقاله برتر را نمایش دهد.

کد مقاله چسبنده وردپرس

لطفا کد زیر را در فایل functions.php زیر تم فعلی ▼ قرار دهید

//让WordPress分类、标签、存档和作者页显示置顶文章
add_filter('the_posts', 'putStickyOnTop' );
function putStickyOnTop( $posts ) {
if ( is_series() || 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) && !empty($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 ( !empty($sticky_posts) && !empty($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 ( !empty($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;
}

//置顶文章添加样式
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;
} 

دستورالعمل استفاده از کد مقاله چسبنده

1) اگر می خواهید صفحه آرشیو تمام مقالات برتر را نمایش دهد، لطفا 11-43 خط کد را حذف کنید.

2) اگر نمی خواهید مقاله برتر در صفحه دسته نمایش داده شود، لطفا ▼ را در سطر 3 اضافه کنید

if(

به ▼ تغییر دهید

// abc是分类的名称
if ( is_category( 'abc' ) || 

3) اگر نمی خواهید مقاله برتر در صفحه برگه نمایش داده شود، لطفا ▼ در خط 3

if(

تبدیل به:

// abc是标签的名称
if ( is_tag( 'abc' ) || 

4) اگر نمی خواهید صفحه نویسنده مقاله برتر را نشان دهد، لطفا ▼ در خط 3

if(

به ▼ تغییر دهید

// abc是作者的昵称
if ( is_author( 'abc' ) || 

5) اگر نمی خواهید یک صفحه دسته بندی سفارشی برای نمایش مقاله برتر، آن را قرار دهید

if(

آن را به:

// series是自定义分类、abc是自定义分类名称
if ( is_series( 'abc' ) ||

کد بالا فقط برای حلقه اصلی معتبر است، اگر از WP_Query یا query_posts برای دریافت لیستی از پست ها در صفحه آرشیو استفاده می کنید و می خواهید پست پین شده را در بالای آن لیست ها نمایش دهید.

می توانید کد زیر را در خط 3 حذف کنید (ممکن است تعداد مقالات نمایش داده شده با آنچه که تنظیم کرده اید متفاوت باشد) ▼

|| !is_main_query() 

به مقاله برتر سبک اضافه کنید

اگر می خواهید به پست چسبنده استایل اضافه کنید، کد زیر را به functions.php اضافه کنید و یک کلاس به نام sticky به پست چسبنده اضافه کنید.

تم های عمومی وردپرس دارای کد CSS از سبک مقاله برتر هستند، همچنین می توانید ▼ سفارشی را اضافه کنید

//置顶文章添加样式
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;
} 

راه دیگری برای اینکه صفحات آرشیو دسته بندی وردپرس، مقالات وردپرس را در بالای▼ نشان دهند وجود دارد

امیدوارم مقاله "چگونه پست‌های پین‌شده را در صفحات دسته‌بندی/برچسب/نویسنده وردپرس نمایش دهیم؟" که در وبلاگ چن ویلیانگ ( https://www.chenweiliang.com/ ) به اشتراک گذاشته شده است، برای شما مفید باشد.

لینک این مقاله را به اشتراک بگذارید: https://www.chenweiliang.com/cwl-878.html

برای کشف ترفندهای مخفی بیشتر🔑، به کانال تلگرام ما بپیوندید!

اگر دوست داشتید به اشتراک بگذارید و لایک کنید! اشتراک گذاری ها و لایک های شما انگیزه ادامه دار ماست!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

رفته به بالا