Eliminare paragraf din jurul unei poze

WordPress are tendința nefericită de a împacheta aproape totul în etichetele <p>. Deși acest lucru este adesea util pentru blocurile de text dintr-o postare, acesta limitează capacitatea noastră de a crea imagini în mod succint și consistent, indiferent de conținutul lor, care conține tagul <a>, <p> sau ambele. Cu alte cuvinte, rareori doriți ca <a> stilurile de etichete (de ex., Border-bottom &: hover) sau <p> stiluri (de exemplu, marginea-jos și max-lățimea) să afecteze stilul imaginilor copilului. Cea mai curată soluție găsită este să scriu o expresie regulată care să filtreze post_content și să înlăture tagurile <p> în jurul <img> în timp ce păstrează textul înconjurător și stilul său (de exemplu, caractere aldine, italice).

Functia care face asta posibil se adauga in functions.php este:

<?php
/**
 * Move image inside <p> tag above the <p> tag while preserving any link around image.
 * Can be prevented by adding any attribute or whitespace to <p> tag, e.g. <p class="yolo"> or even <p >
 */
function gc_remove_p_tags_around_images($content)
{
	$contentWithFixedPTags =  preg_replace_callback('/<p>((?:.(?!p>))*?)(<a[^>]*>)?\s*(<img[^>]+>)(<\/a>)?(.*?)<\/p>/is', function($matches) 
	{
		/*
		Groups 	Regex 			Description
			<p>			starting <p> tag
		1	((?:.(?!p>))*?)		match 0 or more of anything not followed by p>
			    .(?!p>) 		anything that's not followed by p>
			  ?: 			non-capturing group. 
				    *?		match the ". modified by p> condition" expression non-greedily
		2	(<a[^>]*>)?		starting <a> tag (optional)
			\s*			white space (optional)
		3	(<img[^>]+>)		<img> tag
			\s*			white space (optional)
		4	(<\/a>)? 		ending </a> tag (optional)
		5	(.*?)<\/p>		everything up to the final </p>
			i modifier 		case insensitive
			s modifier		allows . to match multiple lines (important for 1st and 5th group)
		*/
			
		// image and (optional) link: <a ...><img ...></a>
		$image = $matches[2] . $matches[3] . $matches[4];
		// content before and after image. wrap in <p> unless it's empty
		$content = trim( $matches[1] . $matches[5] );
		if ($content) {
			$content = '<p>'. $content .'</p>';
		}
		return $image . $content;
	}, $content);
	
	// On large strings, this regular expression fails to execute, returning NULL
	return is_null($contentWithFixedPTags) ? $content : $contentWithFixedPTags;
}
add_filter('the_content', 'gc_remove_p_tags_around_images');

 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Salut și bine ai venit pe acest blog!

Eu sunt Bucur si acesta este blogul meu in care vei gasi articole in majoritatea lor despre Programare web Front-end si un pic de back-end.

Iată cum mă poți contacta:

Ai o intrebare? nu ezita sa ma contactezi.

Vei primi un raspuns in cel mai scurt timp posibil.

    Numele tau (necesar)

    Email (necesar)

    Subiect

    Mesaj

    Prin utilizarea acestui formular sunteți de acord cu stocarea și manipularea datelor dvs. pe acest site web.