رفتن به مطلب
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)

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

 

تشکر

به اشتراک گذاری این ارسال


لینک به ارسال
در 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 رو درست عوض کنید کاملا حذف میشه

به اشتراک گذاری این ارسال


لینک به ارسال
در در 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 قرار دهید.


  • مطالب مشابه

    • توسط mhm5000
      سلام دوستان می‌خواستم بدون چطور میشه آخرین بروز رسانی کل سایت رو نشون داد...
      از بین تمام مطالب و صفحات و...
       
      کسی کد فانکشنش رو داره؟
       
      معمولا سایت‌های خبری / دولتی یه تیکه بالای سایت نشون میدن آخرین بروزرسانی... همون!
       
      ممنون
      موفق باشید
    • توسط esmaeil.am
      سلام وقت بخیر من هر قالبی که نصب میکنم این ارور رو میده از فایل فانکشن و فقط خد 8 رو ارور میده مشکل از چیه دوستان ممنون میشم راهنمایی کنید
      Fatal error: Can't use function return value in write context in /home/********/public_html/wp-content/themes/*********/functions.php on line 8
    • توسط SM-Mahdavi
      سلام دوستان.
      من ProPanel ( کنترل پنل قالب وردپرس رو رو قالبم ست کرده بودم.)
      بعد می خواستم برش دارم. پوشه admin رو پاک کردم و کدهایی که تو فانکشن برای اضافه کردن پنل داده بودم رو هم پاک کردم.
      حالا نمی دونم چی شده فایل فانکشن مشکل پیدا کرده! حتی وردپرس رو هم از اول نصب کردم ولی مشکلم حل نشد. یکی از مشکلاتی که پیدا کرده اینه که مثلا می خوام دسته اضافه کنم میگه از قبل وجود داره. یا تصویر شاخص برای پست می خوام بزارم خطا میده. چند بارم که تکرار بشه دیگه پنل وردپرس بالا نمیاد. مچبورم دوباره وردپرس نصب کنم. و دوباره همون مشکل!
      نمیدونم درست توضیح دادم یا نه ! ولی دوستان اگه چیزی از حرف های من متوجه شدید و راهی به ذهنتون می رسه ممنون میشم کمکم کنید.
      مرسی از همه
    • توسط سعید شعبانی
      اکثر قابلیت هایی که می خواهید توسط هک های وردپرس به سایت خود بیفزایید, یک کد به شما ارائه می دهند که باید در فایل فانکشن قالب خود قرار دهید. شما برای افزودن این کد ها باید فایل فانکشن را باز کنید و کد های جدید را به آن بیفزایید اما این کار می تواند باعث گرفتن وقت شما شود. افزونه Functionality که به تازگی ارائه شده است یک ادیتور جدید به مدیریت وردپرس شما اضافه می کند و شا می توانید کد هایی که می خواهید در فانکشن قرار دهید را در آن بگذارید و این افزونه خودش فایل Function.php را برای شما بسازد. البته مزایایی دیگر نیز این کار دارد. یکی اینکه, کار را برای شما آسان می کند و در زمان بروز مشکل شما راحتر می توانید مشکلات را پیدا و رفع کنید و دیگر اینکه با تغییر قالب دیگر فایل فانکشن شما تغییر نمی کند. اما همین مضیت دوم می توتند یک مشکل برای سایت شما بوجود آورد.
      دانلود افزونه Functionality در مخزن وردپرس
      منبع

    • توسط 021
      سلام
      سال نو مبارک
      اگه میشه کلا فانکشن زیر رو برای من توضیح بدید :


      'action': function(){
      jQuery('.picker').each(function(){
      jQuery(this).val(jQuery(this).attr('default'));
      jQuery(this).trigger('keyup.miniColors');
      });

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