2011-12-21 18 views
7

Actualmente estoy editando un tema de wordpress con salidas de campo personalizadas. He realizado con éxito todas las ediciones y todo funciona como debería. Mi problema es que si una URL se envía al campo personalizado, el eco es exactamente lo que estaba allí, así que si alguien ingresa a www.somesite.com el eco es solo eso y lo agrega al final del dominio: www. mysite.com www.somesite.com. Quiero comprobar si el enlace suministrado tiene el prefijo http:// al principio, si es así, entonces no molesta, pero si no me sale el eco http:// antes de la url.Comprobando si una URL tiene http: // al principio e insertando si no

Espero haber explicado mi problema lo mejor que pueda.

$custom = get_post_meta($post->ID, 'custom_field', true); 

<?php if (get_post_meta($post->ID, 'custom_field', true)) : ?> 
    <a href="<?php echo $custom ?>"> <img src="<?php echo bloginfo('template_url');?>/lib/images/social/image.png"/></a> 
    <?php endif; ?> 
+1

Bueno, parece que sabes cómo usar clases y plantillas. Debería ser capaz de resolver esto con 'substr' incluso si no puede encontrar la manera de hacerlo con' RegEx', 'strncmp', o cualquiera de los muchos otros métodos ... – Dutchie432

+0

http: // stackoverflow .com/questions/4487794/checking-if-string-contains-http –

Respuesta

53

parse_url() puede ayudar ...

$parsed = parse_url($urlStr); 
if (empty($parsed['scheme'])) { 
    $urlStr = 'http://' . ltrim($urlStr, '/'); 
} 
+0

Gracias por las respuestas, pero ¿alguien podría mostrarme un ejemplo del código requerido que se muestra en mi ejemplo? soy un novato de php total y poco a poco me estoy familiarizando, pero todavía golpeo jorobas de velocidad sin fin. –

+0

http://stackoverflow.com/a/8591679/1110064 Lo descubrí y funciona, simplemente no entiendo la parte 'sceme'. ¿Qué es este lol –

+3

¿Quizás google 'parse_url' para ver qué esquema es? parse_url devuelve una matriz de elementos clave/valor. Consulte "Valores de retorno" http://php.net/manual/en/function.parse-url.php – Dutchie432

1
echo (strncasecmp('http://', $url, 7) && strncasecmp('https://', $url, 8) ? 'http://' : '') . $url; 

Recuerde, que vuelve strncmp()0, cuando los primeros n cartas son iguales, lo que se evalúa como false aquí. Eso puede ser un poco confuso.

+0

El uso de funciones de cadena hace que sea más difícil de lo necesario tratar con mayúsculas y minúsculas y 'https: //' – DaveRandom

+1

Ver mi edición. Puede suponer que estos serán los únicos dos esquemas que pueden ocurrir. Vota tu respuesta de todos modos, porque obviamente es la más limpia;) No tiene sentido, si la repito, entonces dejaré mi alternativa como alternativa, que puede cubrir la mayoría de los casos, pero "no tan limpio". Ahora también el caso es irrelevante – KingCrunch

8

Puede verificar si http:// está al comienzo de la cadena usando strpos().

$var = 'www.somesite.com'; 

if(strpos($var, 'http://') !== 0) { 
    return 'http://' . $var; 
} else { 
    return $var; 
} 

De esta manera, si no tiene http:// en el comienzo mismo de la var, volverá http:// en frente de ella. De lo contrario, solo devolverá el $var.

+5

esto fallará si el caso no coincide, o si la url comienza con 'https: //' – Dutchie432

+0

En ese caso, uno podría usar la lógica como 'if (! Preg_match ('#^https? : // # ', $ var)) {' –

Cuestiones relacionadas