رفتن به مطلب

نمایش نام و لینک دسته بندی خارج از حلقه


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

سلام

من برای نمایش نام و لینک دسته بندی پست هر راهی توو نت بود رفتم از the category تا single cat title و غیره .

من برای استفاده در خارج از حلقه ، در single.php میخوام.

  1. نام دسته بندی 
  2. لینک دسته بندی مادر که پست داخلش قرار داره  (بدون تگ a)
  3. لینک دسته بندی فرزند که پست داخلش قرار داره (بدون تگ a)

خروجی اینطور باشه:

http://sitename.com/iran

 

لینک به ارسال

سلام

ببنید این بدردتون میخوره.

https://codex.wordpress.org/Function_Reference/get_category_link

لینک به ارسال
ارسال شده در (ویرایش شده)
در 8 دقیقه قبل، farhad.in گفته است :

سلام

ببنید این بدردتون میخوره.

https://codex.wordpress.org/Function_Reference/get_category_link

ممنون ، امتحان کردم ، هیچ خروجی نمیده

get_category_link( $category_id );

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

ممنون ، امتحان کردم ، هیچ خروجی نمیده


get_category_link( $category_id );

باید id دسته رو به عنوان آرگومان ورودی بهش بدید.

مثلا

get_category_link( '1' );

// output: http://domain.com/category/name

 

لینک به ارسال

سلام و درود

 

وقتی داخل حلقه single.php نباشید آیدی پست رو باید این شکلی بگیرید.

<?php $post_id = get_queried_object_id(); ?>

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

 

موفق باشید

لینک به ارسال
در 5 دقیقه قبل، farhad.in گفته است :

باید id دسته رو به عنوان آرگومان ورودی بهش بدید.

مثلا


get_category_link( '1' );

// output: http://domain.com/category/name

 

این خروجی لینک دسته بندی با آیدی "1" هست ، من میخوام دسته بندی که پست داخلش هست رو خروجی بده ، این کد قراره بره در single.php . 

کد داینامیک میخوام ،

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

سلام و درود

 

وقتی داخل حلقه single.php نباشید آیدی پست رو باید این شکلی بگیرید.


<?php $post_id = get_queried_object_id(); ?>

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

 

موفق باشید

یک مثال میزنید؟ من نام فارسی دسته بندی رو با کد زیر گرفتم ، از صبح انقدر گشتم هنگ کردم

<?php echo get_the_category( $id )[0]->name;?>

لینک به ارسال

کل کدش رو براتون نوشتم و میتونید در فایل single.php مورد استفاده قرار دهید.

<?php
global $post;
$postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
  $cat_id = $postcat[0]->term_id;
  echo get_category_link( $cat_id );
}
?>

 

ویرایش شده توسط farhad.in
اصلاح کد
لینک به ارسال
در 7 دقیقه قبل، farhad.in گفته است :

<?php
global $post;
$postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
  $cat_id = $postcat[0]->term_id;
  echo get_category_link( $cat_id );
                        }
?>

 

ممنون ، دسته فرزند رو خروجی داد بصورت 

sitename.com/iran/news/teh

اگر بخوام بصورت زیر بشه چطوری میشه (دسته مادر) 

sitename.com/iran

لینک به ارسال

درود مجدد

 

تابع زیر رو میذارید توی functions.php قالبتون:

function get_parent_category() {
	
	global $post;
	
	$categories = get_the_category($post->ID);
	
	$parent_category = array();
	foreach($categories as $category) {
		
		if($category->parent === 0) {
			
			$parent_id[] = $category->term_id;
			
		}
		
	}
	
	if($parent_id === array()) {
		
		return false;
		
	}
	
	if(count($parent_id) > 1) {
		
		$parent_id = min($parent_id);
		
	}
	
	return array(
		'name' => get_cat_name($parent_id),
		'link' => get_category_link($parent_id)
	);
	
}

سپس به شکل زیر ازش استفاده میکنید:

<?php
$parent = get_parent_category();
if($parent !== false) {
	$name = $parent['name'];
	$link = $parent['link'];
}
?>

 

موفق باشید

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

اگر بخوام بصورت زیر بشه چطوری میشه (دسته مادر) 

 



 

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

<?php

$custom_cat_url = explode('/', get_category_link( $cat_id ));

echo $custom_cat_url[0].'//'.$custom_cat_url[1].'/'.$custom_cat_url[2].'/'.$custom_cat_url[3];

 

ویرایش شده توسط farhad.in
لینک به ارسال
در 16 ساعت قبل، mehran-b گفته است :

درود مجدد

 

تابع زیر رو میذارید توی functions.php قالبتون:

سپس به شکل زیر ازش استفاده میکنید:


<?php
$parent = get_parent_category();
if($parent !== false) {
	$name = $parent['name'];
	$link = $parent['link'];
}
?>

 

موفق باشید

سلام و تشکر از شما 

نه متاسفانه جواب نداد ، هیچ خروجی نداره ، چند روش مختلف امتحان کردم ، هیچی برنمیگردونه.

من میخوام در یک json schema در single.php استفاده کنم . میخوام وقتی نوشته در دسته بندی با آدرس زیر هست 

http://sitenam.com/iran/video/video-iran/نام-نوشته

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

//خروجی اول 
http://sitenam.com/iran/
//خروجی دوم
http://sitenam.com/iran/video/
//خروجی سوم
http://sitenam.com/iran/video/video-iran/

باتشکر مجدد از شما 

لینک به ارسال
در 16 ساعت قبل، farhad.in گفته است :

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


<?php

$custom_cat_url = explode('/', get_category_link( $cat_id ));

echo $custom_cat_url[0].'//'.$custom_cat_url[1].'/'.$custom_cat_url[2].'/'.$custom_cat_url[3];

 

سلام و تشکر 

فقط مقدار [1] برمیگردونه ! بقیه خالی هستن، حتی اعداد رو جابجا کردم ، ولی فقط 1 درست برمیگردونه ،

میخوام وقتی نوشته در دسته بندی با آدرس زیر هست 

http://sitenam.com/iran/video/video-iran/نام-نوشته

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

//خروجی اول 
http://sitenam.com/iran/
//خروجی دوم
http://sitenam.com/iran/video/
//خروجی سوم
http://sitenam.com/iran/video/video-iran/

باتشکر مجدد از شما 

لینک به ارسال

کدایی که دادم بهتون رو تست کردم و درست کار میکنند، یکم دقت کنید متوجه میشید.

اینم نمونه خروجی کدهایی که بهتون دادم.
5a4604d2deac1_Screenshotfrom2017-12-2912-31-04.thumb.png.24c6b6a3907b1225213f35fc29a62d66.png

 

 

لینک به ارسال

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

<?php
global $post;
$postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
  $cat_id = $postcat[0]->term_id;
  $custom_cat_url = explode('/', get_category_link( $cat_id ));
}
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4]."<hr>";
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5]."<hr>";
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5].'/'.$custom_cat_url[6]."<hr>";
?>

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

موفق باشید.

لینک به ارسال
در 23 ساعت قبل، farhad.in گفته است :

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


<?php
global $post;
$postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
  $cat_id = $postcat[0]->term_id;
  $custom_cat_url = explode('/', get_category_link( $cat_id ));
}
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4]."<hr>";
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5]."<hr>";
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5].'/'.$custom_cat_url[6]."<hr>";
?>

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

موفق باشید.

سلام و تشکر فراوان 

این شرط رو چجوری میشه برقرار کرد که اگر خالی بود هیچی برنگرده؟

if(تمام موارد زیر موجود بود یعنی دسته اول){
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3]."<hr>";
?>
}
//شرط دوم
if(اگر تمام موارد زیر موجود بود یعنی زیر دسته اول){
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4]."<hr>";
?>
}
//شرط سوم
if(تمام موارد زیر موجود بود یعنی زیر دسته دوم){
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5]."<hr>";
?>
}
//و الی آخر

 

لینک به ارسال

همونطور که میدونید مقدار متغییر custom_cat_url$ یک آرایه هست و سه پارامتر اول اون مربوط میشه به آدرس سایت. این عدد سه یادتون باشه.

خب حالا با استفاده از تابع count میتونی تعداد مقادیر آرایه custom_cat_url$ رو بدست بیاری و حاصلش رو منهای ۳ کنی مقداری که بدست میاد تعداد دسته و زیر دسته میباشد.

اگر مقدار حاصل صفر بود یعنی هیچ دسته و زیر دسته ای نداره.

بعد میتونی با استفاده از حلقه foreach تا زمانی که دسته و زیر دسته وجود داره لینک دسته رو بهتون بده.

تمام

ویرایش شده توسط farhad.in
لینک به ارسال
در 18 دقیقه قبل، farhad.in گفته است :

همونطور که میدونید مقدار متغییر custom_cat_url$ یک آرایه هست و سه پارامتر اول اون مربوط میشه به آدرس سایت. این عدد سه یادتون باشه.

خب حالا با استفاده از تابع count میتونی تعداد مقادیر آرایه custom_cat_url$ رو بدست بیاری و حاصلش رو منهای ۳ کنی مقداری که بدست میاد تعداد دسته و زیر دسته میباشد.

اگر مقدار حاصل صفر بود یعنی هیچ دسته و زیر دسته ای نداره.

بعد میتونی با استفاده از حلقه foreach تا زمانی که دسته و زیر دسته وجود داره لینک دسته رو بهتون بده.

تمام

راه کوتاهتر و ساده تری برای بدست آوردن مقدار href دسته نیست؟ که نخوایم explode کنیم؟ فکر کنم توو سایت با بازدید بالا فشار به سرور زیاد باشه..

میتونیم شرط رو اینطور تعریف کنیم؟

if ( ! empty( $custom_cat_url[5] ) ) {
echo $custom_cat_url[0].'//'.$custom_cat_url[1].$custom_cat_url[2].'/'.$custom_cat_url[3].'/'.$custom_cat_url[4].'/'.$custom_cat_url[5]."<hr>";
}

 

لینک به ارسال

درود مجدد

 

نقل قول

راه کوتاهتر و ساده تری برای بدست آوردن مقدار href دسته نیست؟ که نخوایم explode کنیم؟

href دسته های یه پست که مشخصه من نمی فهمم شما هدفتون چیه.

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

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

راه کوتاهتر و ساده تری برای بدست آوردن مقدار href دسته نیست؟ که نخوایم explode کنیم؟ فکر کنم توو سایت با بازدید بالا فشار به سرور زیاد باشه..

 

سروری که نتونه یدونه explode رو هندل کنه سرور نیست !!!
راه دیگه‌ای هم میشه پیدا کرد؛ بهتره همون کدی که بهتون دادمو تابع کنید مورد استفاده قرار بدید داخل کدهای وردپرس و حتی افزونه‌ها کدهای سنگین تر از exploade هم وجود داره :-) 

در مورد شرط هم درسته میتونید استفاده کنید/.

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

درود مجدد

 

href دسته های یه پست که مشخصه من نمی فهمم شما هدفتون چیه.

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

باسلام مجدد ، کد کامل رو براتون میذارم، ببینید کجا میخوام خروجی بگیرم، هر دو مقدار  id و name رو نمیتونم خروجی بگیرم!

ببینید پله پله اضافه میشه . 

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
<?  if (اگر دسته اول خالی نیست){ ?>
  {
    "@type": "ListItem",
    "position": 1,
    "item": {
      "@id": "https://mysite.com/video/",
      "name": "ویدیو",
      "image": "https://mysite.com/cat.png"
    }
  },
  <? } 
    if (اگر دسته فرزند خالی نیست){ ?>
 {
    "@type": "ListItem",
    "position": 2,
    "item": {
      "@id": "https://mysite.com/video/ir/",
      "name": "ویدیو ایران",
      "image": "https://mysite.com/cat.png"
    }
  },
   <? } 
    if (اگر دسته فرزند دوم خالی نیست){ ?>
  {
    "@type": "ListItem",
    "position": 2,
    "item": {
      "@id": "https://mysite.com/video/ir/teh/",
      "name": "ویدیو تهران",
      "image": "https://mysite.com/cat.png"
    }
  }
  <? } ?>
  ]
}
</script>	

 

لینک به ارسال

درود مجدد

 

راه کاری که به نظر من رسید اینه.

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

function calcPosition($url) {
	
	$parse = wp_parse_url($url);
	
	$path = trim($parse['path'], "/");
	
	$count = substr_count($path, "/");
	
	if(strpos($path, "category") !== false) {
	
		return $count;
	
	} else {
		
		return $count + 1;
		
	}
	
}

 

سپس کد زیر رو در فایل single.php استفاده میکنید:

<?php

$cats = get_the_category(get_queried_object_id());

$itemListElement = array();
foreach($cats as $cat) {

	$link = get_category_link($cat->term_id);
	$position = calcPosition($link);
	$itemListElement[$position - 1] = array(
		'@type' => 'ListItem',
		'position' => $position,
		'item' => array(
			'@id' => $link,
			'name' => get_cat_name($cat->term_id)
		)
	);
	
}

$data = array(
	'@context' => 'http://schema.org',
	'@type' => 'BreadcrumbList',
	'itemListElement' => $itemListElement
);

echo '<script type="application/ld+json">';
echo json_encode($data);
echo '</script>';

?>

 

کد فوق میاد برای شما اون رشته JSON رو میسازه.

 

موفق باشید

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

درود مجدد

 

راه کاری که به نظر من رسید اینه.

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

 

سپس کد زیر رو در فایل single.php استفاده میکنید:

 

کد فوق میاد برای شما اون رشته JSON رو میسازه.

 

موفق باشید

باتشکر ، پس بصورت عادی نمیشه

افزونه ها هم بصورت encode خروجی میدن که گوگل توجهی نمیکنه ، سایت هایی که بصورت عادی استفاده میکنن راحت جواب میگرین توو گوگل "گنجور" رو سرچ کنید توو گوگل ، حتی ورزش سه ، سورس سایتشون هم ببینید.

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

باتشکر ، پس بصورت عادی نمیشه

افزونه ها هم بصورت encode خروجی میدن که گوگل توجهی نمیکنه ، سایت هایی که بصورت عادی استفاده میکنن راحت جواب میگرین توو گوگل "گنجور" رو سرچ کنید توو گوگل ، حتی ورزش سه ، سورس سایتشون هم ببینید.

درود مجدد

 

مظنورتون اینه که JSON ای رو که PHP انکد میکنه رو گوگل نمیخونه؟

اگر منظور اینه صفحه ای رو که دارید توش از این کد استفاده میکنید ارسال کنید آدرسش رو تا خودم چک کنم.

چون بعیده گوگل نتونه بخونه این حالت رو.

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

درود مجدد

 

مظنورتون اینه که JSON ای رو که PHP انکد میکنه رو گوگل نمیخونه؟

اگر منظور اینه صفحه ای رو که دارید توش از این کد استفاده میکنید ارسال کنید آدرسش رو تا خودم چک کنم.

چون بعیده گوگل نتونه بخونه این حالت رو.

سلام

خروجی کد شما نتونست لیست کنه کامل 

<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"BreadcrumbList","itemListElement":{"2":{"@type":"ListItem","position":3,"item":{"@id":"http:\/\/www.site.com\/video\/eu-video\/england-video\/","name":"\u0648\u06cc\u062f\u06cc\u0648 \u0627\u0646\u06af\u0644\u06cc\u0633"}}}}</script>

 

لینک به ارسال

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

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

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

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

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

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

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

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

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