رفتن به مطلب

تغییر کارکرد پست قبلی و بعدی وردپرس


miraziz

پست های پیشنهاد شده

سلام. دوستان همانطور که می دانید در وردپرس میتوان در انتهای مطلب امکانی را افزود که مخاطب با آنها به پست قبلی یا بعدی برود. ولی این اماکن بر اساس تاریخ انتشار مطالب عمل می کند. می خواستم بپرسم آیا امکانش هست که در کنار تاریخ انتشار، دسته را هم افزود. یعنی مثلا وقتی شما مطلبی را از دسته « اخبار» می بینید در قسمت پایین نوشته، پست قبلی و بعدی مربوط به دسته «اخبار» را بیاره. (منظورم اعمال بر فرزندترین دسته است) و اگر امکانش باشه مانند عکس زیر دو متن پست قبلی و پست بعدی را هم دستی بهش اضافه کنم/

5b8cc2b68fda6_Screenshot(89).png.b1981bb71f4a9d600426f3f557462aea.png

کدهای زیر مربوط به ناوبری قالب من است.

      <!-- /post-nav -->				
						
				<div class="post-nav">
			
					<?php
					$next_post = get_next_post();
					if (!empty( $next_post )): ?>
				
						<a class="post-nav-newer" title="<?php _e('Next post:', 'lingonberry'); echo ' ' . get_the_title($next_post); ?>" href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo get_the_title($next_post); ?> &raquo;</a>
				
					<?php endif; ?>
				
					<?php
					$prev_post = get_previous_post();
					if (!empty( $prev_post )): ?>
				
						<a class="post-nav-older" title="<?php _e('Previous post:', 'lingonberry'); echo ' ' . get_the_title($prev_post); ?>" href="<?php echo get_permalink( $prev_post->ID ); ?>">&laquo; <?php echo get_the_title($prev_post); ?></a>
				
					<?php endif; ?>
					
					<div class="clear"></div>
				
				</div> 
	<!-- /post-nav -->

 

ویرایش شده توسط miraziz
لینک به ارسال

اینم کدهای مربوطه در فایل توابه هستش

// Add classes to next_posts_link and previous_posts_link
add_filter('next_posts_link_attributes', 'lingonberry_posts_link_attributes_1');
add_filter('previous_posts_link_attributes', 'lingonberry_posts_link_attributes_2');

function lingonberry_posts_link_attributes_1() {
    return 'class="post-nav-older"';
}
function lingonberry_posts_link_attributes_2() {
    return 'class="post-nav-newer"';
}

 

لینک به ارسال
در 59 دقیقه قبل، radintaban گفته است :

یعنی شما میخواید در صفحه مطلب، زیر بعدی و قبلی نام دسته بندی مطلب رو هم نمایش بده؟!

دسته بندی رو در اطلاعات پست که نوشته!

نه. الان پست قبلی و بعدی را بر اساس تاریخ انتشار نشون میده. یعنی فرقی نمیکنه مطالب مربوط به کدوم دسته باشند. ولی من می خواهم مطلب قبلی و بعدی همون دسته را نشون بده.

لینک به ارسال
در 26 دقیقه قبل، miraziz گفته است :

@mehran-be سلام. آقا مهران در این مورد اطلاعاتی دارین؟

سلام

 

برای تغییر لینک اون دو دکمه وردپرس هوکی در نظر نگرفته و موردی که میخواید باید از سر نوشته بشه.

لینک به ارسال
در 1 ساعت قبل، mehran-be گفته است :

سلام

برای تغییر لینک اون دو دکمه وردپرس هوکی در نظر نگرفته و موردی که میخواید باید از سر نوشته بشه.

من از اینترنت کدهای زیر را پیدا کردم که جایگزین کدهای فعلی بکنم. تقریبا درست کار می کنند ولی یک مشکل کوچک دارند. شرحش یکم طولانی‌یه ولی خواستم درست منظورم را برسانم.

وقتی از گوگل به یک مطلب از دسته مثلا «ایلهان» انتقال داده می شوم. در انتهای مطلب که بر روی پست بعدی کلیک می کنم. از اون دسته‌ی «ایلهان» خارج میشه و پستی از یک دسته‌ی دیگه مثلا «اورهان» را نشون میده. ولی بعد از اون درست کار می کنه. یعنی تو مطالب دسته ی اورهان درست یک به یک جابجا میشه. هر دوی این دسته ها هم زیر مجموعه‌ی یک دسته مثلا شاعران ترکیه هستند. در واقع در مرحله ی اول اون مشکل را داره. میشه فهمید به چه علت میتونه باشه

<?php
$post_id = $post->ID; // Get current post ID
$cat = get_the_category(); 
$current_cat_id = $cat[0]->cat_ID; // Get current Category ID 

$args = array('category'=>$current_cat_id,'orderby'=>'post_date','order'=> 'DESC');
$posts = get_posts($args);
// Get IDs of posts retrieved by get_posts function
$ids = array();
foreach ($posts as $thepost) {
    $ids[] = $thepost->ID;
}
// Get and Echo the Previous and Next post link within same Category
$index = array_search($post->ID, $ids);
$prev_post = $ids[$index-1];
$next_post = $ids[$index+1];
?>

<?php if (!empty($prev_post)){ ?> <a class="previous-post" rel="prev" href="<?php echo get_permalink($prev_post) ?>"> <span class="meta-icon"><i class="fa fa-angle-left fa-lg"></i></span> Previous</a> <?php } ?>

<?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Next <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>

 

ویرایش شده توسط miraziz
لینک به ارسال
در 38 دقیقه قبل، miraziz گفته است :

من از اینترنت کدهای زیر را پیدا کردم که جایگزین کدهای فعلی بکنم. تقریبا درست کار می کنند ولی یک مشکل کوچک دارند. شرحش یکم طولانی‌یه ولی خواستم درست منظورم را برسانم.

وقتی از گوگل به یک مطلب از دسته مثلا «ایلهان» انتقال داده می شوم. در انتهای مطلب که بر روی پست بعدی کلیک می کنم. از اون دسته‌ی «ایلهان» خارج میشه و پستی از یک دسته‌ی دیگه مثلا «اورهان» را نشون میده. ولی بعد از اون درست کار می کنه. یعنی تو مطالب دسته ی اورهان درست یک به یک جابجا میشه. هر دوی این دسته ها هم زیر مجموعه‌ی یک دسته مثلا شاعران ترکیه هستند. در واقع در مرحله ی اول اون مشکل را داره. میشه فهمید به چه علت میتونه باشه

والا فهمیدن کدهای سایر برنامه نویس ها برام سخته !!!

لینک به ارسال
در 3 ساعت قبل، mehran-be گفته است :

والا فهمیدن کدهای سایر برنامه نویس ها برام سخته !!!

در مورد کدهای زیر می تونید راهنمایی کنین که بر روی دسته فرزند اعمال بشه. الان کاملا درست کار می کنه با این تفاوت که بر روی دسته والد تنظیم شده

<ul class="pager">
                <?php if ( get_previous_post() != null ) : ?>
                  <li class="previous">
                    <span class="nav-previous">
                      <?php 
                        $singular_nav_previous_text   = apply_filters( 'tc_singular_nav_previous_text', _x( '&larr;' , 'Previous post link' , 'customizr' ) );
                        previous_post_link( '%link' , '<span class="meta-nav">' . $singular_nav_previous_text . '</span> %title' ); 
                      ?>
                    </span>
                  </li>
                <?php endif; ?>
                <?php if ( get_next_post() != null ) : ?>
                  <li class="next">
                    <span class="nav-next">
                      <?php
                        $singular_nav_next_text       = apply_filters( 'tc_singular_nav_next_text', _x( '&rarr;' , 'Next post link' , 'customizr' ) );
                        next_post_link( '%link' , '%title <span class="meta-nav">' . $singular_nav_next_text . '</span>' ); 
                        ?>
                    </span>
                  </li>
                <?php endif; ?>
              </ul>

 

کد توابعش

add_filter( 'get_next_post_join', 'navigate_in_same_taxonomy_join', 20);
add_filter( 'get_previous_post_join', 'navigate_in_same_taxonomy_join', 20 );
function navigate_in_same_taxonomy_join() {
	global $wpdb;
	return " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
}


add_filter( 'get_next_post_where' , 'navigate_in_same_taxonomy_where' );
add_filter( 'get_previous_post_where' , 'navigate_in_same_taxonomy_where' );
function navigate_in_same_taxonomy_where( $original ) {
	global $wpdb, $post;
	$where 		= '';
	$taxonomy  	= 'category';
	$op 		= ('get_previous_post_where' == current_filter()) ? '<' : '>';
	$where 		= $wpdb->prepare( "AND tt.taxonomy = %s", $taxonomy );
	if ( ! is_object_in_taxonomy( $post->post_type, $taxonomy ) )
		return $original ;

	$term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );

	$term_array = array_map( 'intval', $term_array );

	if ( ! $term_array || is_wp_error( $term_array ) )
		return $original ;

	$where 		= " AND tt.term_id IN (" . implode( ',', $term_array ) . ")";
	return $wpdb->prepare( "WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = 'publish' $where", $post->post_date, $post->post_type );
}

 

لینک به ارسال

سلام. دوستان من از طریق سایت های خارجی متوجه شدم که کد زیر ناوبری پست های وردپرس را درون یک دسته انجام می دهد. in_same_term

ولی دسته های فرزند را در نظر نمی گیرد و فقط بین دسته والد جابجا میشه. grandchild_term

چگونه میشه کاری کرد که فرزندترین دسته را هم در نظر بگیرد؟

<?php previous_post_link( '&laquo; %link', '%title', true ); ?> | 
<?php next_post_link( '%link &raquo;', '%title', true ); ?>

 

لینک به ارسال
در 1 ساعت قبل، miraziz گفته است :

چگونه میشه کاری کرد که فرزندترین دسته را هم در نظر بگیرد؟

سلام

 

تابع زیر رو بذارید توی فایل functions.php قالب.

function mehran_exclude_all_except_last_child($post = null) {
	
	$post = get_post($post);
	
	if(!$post)
		
		return array();
		
	$cats = get_the_category($post->ID);
	
	if(empty($cats))
		
		return array();
		
	$excluds = array();
		
	foreach($cats as $cat) {
	
		if($cat->parent != 0)
			
			continue;	
		
		$excluds[] = $cat->term_id;
			
	}
	
	return $excluds;
	
}

بعدش که میخواید نمایش بدید قبل و بعد رو به شکل زیر عمل کنید.

<?php

$excluds = mehran_exclude_all_except_last_child(get_queried_object_id());

previous_post_link('&laquo; %link', '%title', true, $excluds);

next_post_link('%link &raquo;', '%title', true, $excluds);

?>

احتمال داره درست عمل کنه البته مطمئن نیستم.

لینک به ارسال
در 8 دقیقه قبل، mehran-be گفته است :

سلام

احتمال داره درست عمل کنه البته مطمئن نیستم.

سلام آقا مهران عزیز. متاسفانه درست عمل نکرد. یعنی اصلا مشخص هم نبود بر چه اساسی پست ها را نشون میده

لینک به ارسال
در 7 دقیقه قبل، miraziz گفته است :

سلام آقا مهران عزیز. متاسفانه درست عمل نکرد. یعنی اصلا مشخص هم نبود بر چه اساسی پست ها را نشون میده

آره فک میکردم انقدر ساده نباشه.

لینک به ارسال
در 16 دقیقه قبل، mehran-be گفته است :

آره فک میکردم انقدر ساده نباشه.

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

لینک به ارسال
در 23 ساعت قبل، mehran-be گفته است :

آره فک میکردم انقدر ساده نباشه.

سلام. آقا مهران با همین کد ساده هم خیلی خوب کار کرد. می دونین قضیه از چه قرار بود. ترتیب دسته بندی زیر را در نظر بگیرید

-شعر
--شاعران آمریکا
--- امیلی دیکنسون

من هنگام ارسال پست در دسته‌بندی تیک هر سه گزینه‌ی بالا را می زدم. درحالی که اگر تنها تیک دسته «امیلی دیکنسون» را بزنم کد به درستی کار می‌کنه/

حالا می‌خواستم بدونم اگر دیگر دسته های والد را تیک نزنم در مورد سئو بد است.

 

@4M!R

لینک به ارسال
در 13 دقیقه قبل، miraziz گفته است :

من هنگام ارسال پست در دسته‌بندی تیک هر سه گزینه‌ی بالا را می زدم. درحالی که اگر تنها تیک دسته «امیلی دیکنسون» را بزنم کد به درستی کار می‌کنه

خوب اگر شما فقط 1 دسته داشته باشید همون پارامتر سوم اون دو تابع رو true بذارید نتسجه درست باید باشه و احتیاجی به تابع من نیست.

لینک به ارسال
در 7 دقیقه قبل، mehran-be گفته است :

خوب اگر شما فقط 1 دسته داشته باشید همون پارامتر سوم اون دو تابع رو true بذارید نتسجه درست باید باشه و احتیاجی به تابع من نیست.

در واقع دسته هایی که بالا نوشتم زیر مجموعه ی هم هستند. یعنی فقط فرزندترین دسته‌ را تیک بزنم دیگه.

فقط کد زیر عنوان مطلب را نشون میده. اگر بخواهم به جای عنوان متن دلخواه. مانند پست قبلی - پست بعدی را نشون بده چه تغییری بهش بدم

<?php previous_post_link( '« %link', '%title', true ); ?> | 
<?php next_post_link( '%link »', '%title', true ); ?>

 

لینک به ارسال
در 51 دقیقه قبل، miraziz گفته است :

سلام. آقا مهران با همین کد ساده هم خیلی خوب کار کرد. می دونین قضیه از چه قرار بود. ترتیب دسته بندی زیر را در نظر بگیرید

-شعر
--شاعران آمریکا
--- امیلی دیکنسون

من هنگام ارسال پست در دسته‌بندی تیک هر سه گزینه‌ی بالا را می زدم. درحالی که اگر تنها تیک دسته «امیلی دیکنسون» را بزنم کد به درستی کار می‌کنه/

حالا می‌خواستم بدونم اگر دیگر دسته های والد را تیک نزنم در مورد سئو بد است.

 

@4M!R

نه موردی نداره  

لینک به ارسال
در 1 ساعت قبل، miraziz گفته است :

فقط کد زیر عنوان مطلب را نشون میده. اگر بخواهم به جای عنوان متن دلخواه. مانند پست قبلی - پست بعدی را نشون بده چه تغییری بهش بدم

دو تابع زیر رو توی فایل functions.php قالب سایت قرار بدید.

function mehran_next_post_title($title) {
	
	return 'پست بعدی';
	
}

function mehran_previous_post_title($title) {
	
	return 'پست قبلی';
	
}

کدتون هم به شکل زیر میشه.

<?php

add_filter('the_title', 'mehran_previous_post_title');

previous_post_link('« %link', '%title', true);

add_filter('the_title', 'mehran_next_post_title');

next_post_link('%link »', '%title', true);

remove_filter('the_title', 'mehran_previous_post_title');
remove_filter('the_title', 'mehran_next_post_title');

?>

 

لینک به ارسال
در 5 ساعت قبل، mehran-be گفته است :

دو تابع زیر رو توی فایل functions.php قالب سایت قرار بدید.

کدتون هم به شکل زیر میشه.

 

فقط آقا مهران من چگونه به اینها کلاس اضافه کنم. چون باید برای «پست قبلی» و «پست بعدی» جداگانه استایل و خصوصا float بدم.

لینک به ارسال
در 3 ساعت قبل، miraziz گفته است :

فقط آقا مهران من چگونه به اینها کلاس اضافه کنم. چون باید برای «پست قبلی» و «پست بعدی» جداگانه استایل و خصوصا float بدم.

والا سخته کلاس اضافه کردن بهشون با استفاده از اتریبیوت rel شون سلکتشون کنید.

a[rel=prev]

و

a[rel=next]

 

لینک به ارسال
در 29 دقیقه قبل، mehran-be گفته است :

والا سخته کلاس اضافه کردن بهشون با استفاده از اتریبیوت rel شون سلکتشون کنید.


a[rel=prev]

و

a[rel=next]

 

متوجه نشدم. یعنی یک تگ A باز کنم و در rel اش کدهای php را قرار دهم؟

لینک به ارسال
در 8 ساعت قبل، mehran-be گفته است :

نه اینا سلکتور CSS هست.

https://wpu.ir/aur2e

از این روش استفاده کردم

<div>
   <div class="previous-post ">
     <?php
       add_filter('the_title', 'mehran_previous_post_title');
       previous_post_link('« %link', '%title', true);
       remove_filter('the_title', 'mehran_previous_post_title');
     ?>
    </div>					
    <div class="next-post ">
      <?php
        add_filter('the_title', 'mehran_next_post_title');
        next_post_link('%link »', '%title', true);
        remove_filter('the_title', 'mehran_next_post_title');
      ?>
    </div>
</div>
	/* ناوبری شعر   --------------------------------------- */
.previous-post, .next-post {
    color: #fff;
    background-color: #999;
    text-align: center;
    height: 26px;
    line-height: 24px;
    font-size: 14px;
    padding: 0 10px;
    margin-bottom: 30px;
    text-transform: uppercase;	
}
.previous-post:hover, .next-post:hover {background-color: #666; color:#fff;}

.previous-post a, .next-post a{color: #fff;}
.previous-post a:hover, .next-post a:hover{color: #fff;}

.previous-post {float: right !important; margin-right:-1%; border-radius: 9px 0px 0px 9px;}
.next-post {float: left !important; margin-left: -1%; border-radius: 0px 9px 9px 0px;}

 

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...