رفتن به مطلب

راهنمایی در مورد یک کد فانکشن (حذف لینک های موجود در متن)


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

سلام دوستان

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

add_filter('the_content', 'removelink_content',1);

function removelink_content($content = '')
{
	preg_match_all("#<a(.*?)>(.*?)</a>#i",$content, $matches);
	$num = count($matches[0]);for($i = 0;$i < $num;$i++){
		$content = str_replace($matches[0][$i] , $matches[2][$i] , $content);
	}
	return $content;
}

حالا میخوام همه لینک ها حذف نشه بلکه یکسری لینک هایی که بهش میدم حذف بشه و یکسری لینک هایی که آخرشون متغیر هست مثل (site.com/tag/1125)

لطفا راهنمایی کنید کد بالا چه تغییری باید بکنه

 

تشکر

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

سلام دوستان

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


add_filter('the_content', 'removelink_content',1);

function removelink_content($content = '')
{
	preg_match_all("#<a(.*?)>(.*?)</a>#i",$content, $matches);
	$num = count($matches[0]);for($i = 0;$i < $num;$i++){
		$content = str_replace($matches[0][$i] , $matches[2][$i] , $content);
	}
	return $content;
}

حالا میخوام همه لینک ها حذف نشه بلکه یکسری لینک هایی که بهش میدم حذف بشه و یکسری لینک هایی که آخرشون متغیر هست مثل (site.com/tag/1125)

لطفا راهنمایی کنید کد بالا چه تغییری باید بکنه

 

تشکر

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

محل کد:  ( function.php )

add_filter( 'the_content', 'misha_remove_all_a' );
function misha_remove_all_a( $content ){
    $i_link = array (
        '#<a href="http://pouya.com">(.*?)</a>#is',
        '#<a href="http://pouya1.com">(.*?)</a>#is',
    );
    return preg_replace($i_link, '\1', $content);
}

 

ویرایش شده توسط pouya.x
لینک به ارسال
در ۱ ساعت قبل، pouya.x گفته است :

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

محل کد:  ( function.php )


add_filter( 'the_content', 'misha_remove_all_a' );
function misha_remove_all_a( $content ){
    $i_link = array (
        '#<a href="http://pouya.com">(.*?)</a>#is',
        '#<a href="http://pouya1.com">(.*?)</a>#is',
    );
    return preg_replace($i_link, '\1', $content);
}

 

 

متاسفانه کار نمیکنه کد بالا و هیچ لینکی را حذف نمیکنه

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

متاسفانه کار نمیکنه کد بالا و هیچ لینکی را حذف نمیکنه

بگو دقیقا چه لینک هایی رو میخوای حذف کنی.

تگ ها یا دسته ها یا ...

لینک به ارسال

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

یکی لینک سایت: مثلا http://site.com

یکی هم لینک های متغیر (یک بخش یا دو بخش متغییر باشه) : مثل http://site.com/tags/1562 یا http://site.com/1/1562 

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

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

یکی لینک سایت: مثلا http://site.com

یکی هم لینک های متغیر (یک بخش یا دو بخش متغییر باشه) : مثل http://site.com/tags/1562 یا http://site.com/1/1562 

یعنی هر لینکی که توش آدرس سایت باشه باید حذف شه؟

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

یعنی هر لینکی که توش آدرس سایت باشه باید حذف شه؟

اره

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

میخواهیم لینک یکسری کلمات که لینکدار هستن را حذف کنیم (فقط لینک نه خود کلمه)

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

اره

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

میخواهیم لینک یکسری کلمات که لینکدار هستن را حذف کنیم (فقط لینک نه خود کلمه)

من متوجه نمیشم چی میگی.

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

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

من متوجه نمیشم چی میگی.

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

بله

یکسری لینک هایی که تعیین میکنیم باید حذف بشه و از متن پست ها

با کدی که خودم اول گذاشتم کل متن پست بدون لینک میشه اما مشکلش اینه که برای پست هایی که حتی بخواهیم لینکدار باشه هم حذف میکنه

میخوام فقط لینک هایی که بهش میدم حذف کنه

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

بله

یکسری لینک هایی که تعیین میکنیم باید حذف بشه و از متن پست ها

با کدی که خودم اول گذاشتم کل متن پست بدون لینک میشه اما مشکلش اینه که برای پست هایی که حتی بخواهیم لینکدار باشه هم حذف میکنه

میخوام فقط لینک هایی که بهش میدم حذف کنه

خوب اینطوری شما باید با RegEx آشنایی داشته باشید.

کدش این میشه:

add_filter('the_content', function($content)
{
	$dom = new DOMDocument('1.0', 'UTF-8');
	@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
	$xpath = new DOMXpath($dom);
	
	$anchor = $xpath->query('//a');
	
	if($anchor->length == 0)
	{
		return $content;
	}
		
	$pattern = '/^https:\/\/mehran\.com/';
	
	foreach($anchor as $link)
	{
		if(preg_match($pattern, $link->getAttribute('href')))
		{
			if($link->childNodes->length > 0)
			{
				$link->parentNode->insertBefore($link->childNodes->item(0), $link);
			}
			
			$link->parentNode->removeChild($link);
		}
	}
	
	return trim(preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML($dom->documentElement))));
});

 

که متغییر pattern شامل الگوی آدرس لینک هایی میشه که باید حذف شن.

به عنوان مثال مقداری که من وارد کردم لینک هایی که با عبارت:

https://mehran.com

شروع میشن رو حذف میکنه.

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

 

متاسفانه کار نمیکنه کد بالا و هیچ لینکی را حذف نمیکنه

تست کرده بودم ادرس داخل href رو درست عوض کنید کاملا حذف میشه

لینک به ارسال
  • 3 ماه بعد...
در در 8/28/2019 at 14:49، mehran-b گفته است :

خوب اینطوری شما باید با RegEx آشنایی داشته باشید.

کدش این میشه:


add_filter('the_content', function($content)
{
	$dom = new DOMDocument('1.0', 'UTF-8');
	@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
	$xpath = new DOMXpath($dom);
	
	$anchor = $xpath->query('//a');
	
	if($anchor->length == 0)
	{
		return $content;
	}
		
	$pattern = '/^https:\/\/mehran\.com/';
	
	foreach($anchor as $link)
	{
		if(preg_match($pattern, $link->getAttribute('href')))
		{
			if($link->childNodes->length > 0)
			{
				$link->parentNode->insertBefore($link->childNodes->item(0), $link);
			}
			
			$link->parentNode->removeChild($link);
		}
	}
	
	return trim(preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML($dom->documentElement))));
});

 

که متغییر pattern شامل الگوی آدرس لینک هایی میشه که باید حذف شن.

به عنوان مثال مقداری که من وارد کردم لینک هایی که با عبارت:


https://mehran.com

شروع میشن رو حذف میکنه.

اگر عکس داشتیم با آدرس سایت خاص

چه تغییراتی باید تو کدهای بالا اضافه کنیم تا مثلا عکس هایی که از سایت https://mehran.com/images لود میشه حذف کنه؟

لینک به ارسال

@ahmad4u

 

add_filter('the_content', function($content)
{
	$dom = new DOMDocument('1.0', 'UTF-8');
	@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
	$xpath = new DOMXpath($dom);
	
	$image = $xpath->query('//img');
	
	if($image->length == 0)
	{
		return $content;
	}
		
	$pattern = '/^https:\/\/mehran\.com\/images.*/';
	
	foreach($image as $img)
	{
		if(preg_match($pattern, $img->getAttribute('src')))
		{
			$img->parentNode->removeChild($img);
		}
	}
	
	return trim(preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML($dom->documentElement))));
});

 

لینک به ارسال

آیا امکانش هست هر دو کد (حذف لینک + حذف تصویر) را در هم ادغام کنم یا باید حتما بصورت جداگانه وارد کنم.

کد را بصورت زیر ادغام میکنم اما لینک حذف میشود اما تصویر حذف نمشود

add_filter('the_content', function($content)
{
	$dom = new DOMDocument('1.0', 'UTF-8');
	@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
	$xpath = new DOMXpath($dom);
	
	$anchor = $xpath->query('//a');
	
	if($anchor->length == 0)
	{
		return $content;
	}
		
	$pattern = '/^https:\/\/mehran\.com/';
	
	foreach($anchor as $link)
	{
		if(preg_match($pattern, $link->getAttribute('href')))
		{
			if($link->childNodes->length > 0)
			{
				$link->parentNode->insertBefore($link->childNodes->item(0), $link);
			}
			
			$link->parentNode->removeChild($link);
		}
	}


	$image = $xpath->query('//img');
	
	if($image->length == 0)
	{
		return $content;
	}
		
	$pattern = '/^https:\/\/mehran\.com\/images.*/';
	
	foreach($image as $img)
	{
		if(preg_match($pattern, $img->getAttribute('src')))
		{
			$img->parentNode->removeChild($img);
		}
	}
	
	return trim(preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML($dom->documentElement))));
});

اگر امکانش هست ادغام شده دو کد را هم قرار بدید

لینک به ارسال

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

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

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

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

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

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

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

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

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