Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/12/2013, 06:51
Avatar de AlejandroGalvez
AlejandroGalvez
 
Fecha de Ingreso: noviembre-2013
Mensajes: 189
Antigüedad: 10 años, 5 meses
Puntos: 49
Respuesta: Expresiones regulares

Yo tampoco veo muy bien el fallo. Quizás se deba a que ejecutas varias veces el filtro the_content y por tanto se remplaza dos veces o más el contenido. Viendo el parámetro que has indicado a preg_replace() como límite, que es el 1, tu código solo debe hacer una sustitución por palabra del glosario y no más. Así que es obvio que se ejecuta el filtro más de una vez.

Puedes comprobarlo concatenando cualquier texto al final a $cadena y luego ver cuantas veces se imprime:

Código PHP:
Ver original
  1. return $cadena . ' --- Probando redundancia --- ';

Si solo se imprime una vez el texto de prueba entonces todo está en orden, aunque no debería estarlo por lo que cuentas. Tu solución es evitar que el filtro se aplique 2 o más veces al contenido del post, pues no tiene sentido y deriva en errores como el que te ocurre.

Como no se me ocurre la expresión regular que deseas, aunque si el posible problema que evita el correcto funcionamiento de la tuya, te dejo tu código más resumido y con el límite establecido a infinito como apoyo

Código PHP:
function reemplazar$cadena ) { 

    
$args = array( 
        
'showposts'   => -1
        
'category_name' => 'glosario'
        
'post_type' => 'glosario'
    );  
    
    
$posts_array    get_posts$args ); 
    
$patron            = array();
    
$remplazo        = array();
    
    foreach ( 
$posts_array as $posts ) {
        
        
$patron[]        = '/(?<=\s|^)' get_the_title$posts->ID ) . '(?=\s|\.|\,|$)/i';
        
$remplazo[]        = '<a href="' get_permalink($posts->ID) . '" title="' $posts->post_content .'">' get_the_title($posts->ID) . '</a>';
    
    } 
    
    return 
preg_replace$patron$remplazo$cadena, -); 
    

  
add_filter('the_content''reemplazar');