Pregunta sobre Arreglando WordPress de Wordpress:

Apunte nofollow noopener a espacios en blanco con enlaces externos

Un usuario preguntó 👇

Hola, solo quiero agregarlo a enlaces externos. Aquí está el código que está destinado a hacer el trabajo, pero cuando lo pongo en mi carpeta functions.php, el sitio no es irresponsable. ¿Qué está mal con este código?

<?php
function replaceAnchorsWithText($data) {

    $regex  = '/<a .* href=["|']([^"|']*)["|'][^>]*>([^<]*)</a>/i';//regex
    if (is_array($data)) {
    if (strpos($data[1], "https://example.com/") === false)
        $data= '<a href="'.$data[1].'" rel="nofollow noopener" target="_blank">'.$data[2].'</a>';
  else
       $data='<a href="'.$data[1].'" target="_blank">'.$data[2].'</a>';

    }
    return preg_replace_callback($regex, 'replaceAnchorsWithText', $data);
}

$output = replaceAnchorsWithText('<a href="https://example.co">A</a>
Link Must Be In New line<a href="https://example.com/">B</a>');

echo $output;

(@howdy_mcgee)

Hace 2 años, 1 mes

Usar expresiones regulares para este tipo de cosas es un fastidio. Creo que PHOM DOMDocument es mucho más fácil de trabajar y comprender. A continuación, se muestra un ejemplo de lo que quiere hacer:

$doc = new DOMDocument();	// Create new DOMDocument
$doc->loadHTML( $data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );	// Load HTML without body or Doctype
$links = $doc->getElementsByTagName( 'a' );	// Retrieve an array of anchor tags

// Loop through anchor tags
foreach( $links as $item ) {
	
	// IF anchor tag has a target attribute AND the target attribute is '_blank'
	if( $item->hasAttribute( 'target' ) && '_blank' ===  $item->getAttribute( 'target' ) ) {
		
		// Set a rel attribute
		$item->setAttribute( 'rel', 'nofollow noopener' );
	}
		
}

// Save HTML
$data = $doc->saveHTML();

Creo que DOMDocument es una extensión que debe habilitarse para el servidor, pero la mayoría de los servidores deben habilitarla. Lo anterior funciona en mi caso de prueba.

Lanzador de hilos

(@triplecomp)

Hace 2 años, 1 mes

¿Esto retrasaría el sitio de todos modos? Lo quiero para que sea como siempre fueron al principio

(@howdy_mcgee)

Hace 2 años, 1 mes

No veo por qué lo retrasaría en una cantidad significativa. Siempre puedes aplicarlo y ver si hace una velocidad diferente. Si es así, regrese a la mesa de dibujo.

Lanzador de hilos

(@triplecomp)

Hace 2 años, 1 mes

¿DOM actuaría de una manera que los nuevos enlaces estarán antes de que se cargue una página? Por lo tanto, no tiene que depender de cargar algo correctamente para que se muestre como nofollow. Quiero que funcione de manera similar para buscar y reemplazar el plugin donde es permanente y como estaba Siempre fue nofollow desde el principio.

(@howdy_mcgee)

Hace 2 años, 1 mes

Tal vez si lo ejecuta durante un wp_insert_post_data Gancho de filtro. Siempre que guarde el trabajo, puede ejecutar el contenido del trabajo a través del código anterior. Por supuesto, debe probar esto en muchos casos para asegurarse de que funcione como es de esperar (y mantener múltiples copias de seguridad en caso de un problema inesperado).

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.