Comunidad de diseño web y desarrollo en internet online

Personalizar el mensaje para posts protegidos en Wordpress

Pues eso mismo, desde hace un par de días ando en la tarea de crear una plantilla para wordpress desde cero, debo agregar que todo marchaba de maravilla hasta que me tope con un detalle; experimentalmente bloquee un post y me dispuse a revisarlo. El resultado aunque aceptable para muchos, no me hizo sonreír.


Panel de administración de Wordpress

Para ello busque la siguiente cadena (que podrás apreciar en la imagen) devuelve wordpress por defecto sobre la plantilla, así llegue no a la carpeta del template en si, sino un poco mas profundo en el núcleo mismo:


Antes de modificar y añadir estilos personalizados, default.

El archivo encargado de dar esta función se localiza en ../wp-includes/post-template.php alrededor de la linea 980 (WP: 2.7.1), mas exactamente la función get_the_password_form.

Manos a la obra

Una vez localizada la función (comentada mas abajo), debes comprender en términos básicos el sencillo papel de esta:
  1. La función get_the_content (linea 179) revisa en cada post si esta bloqueado bajo contraseña. En caso de ser así es cuando se llama a la función get_the_password_form.
  2. Una vez invocada, cambia la salida por una cadena por defecto, entre ella una forma (<form>) que revisara la contraseña y solo redirige al post completo cuando esta sea correcta.
    Nuestro objetivo es sencillo, modificar el texto inyectado por uno que se amolde a nuestra plantilla.

Código :

function get_the_password_form() {
global $post;
$label = 'pwbox-'.(empty($post->ID) ? rand() : $post->ID);
$output = '<form action="' . get_option('siteurl') . '/wp-pass.php" method="post">
<p>' . __("This post is password protected. To view the content please type it in:") . '</p>
<p><label for="' . $label . '">' . __("Password:") . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . __(" ") . '" /></p>
</form>
';
return apply_filters('the_password_form', $output);
}
Así pues, lo que nos queda es modificar la función para que devuelva algo a nuestro agrado y de paso asignar un par de clases para algunos elementos y poder personalizarlos vía CSS. Por ejemplo;

Código :

function get_the_password_form() {
global $post;
$label = 'pwbox-'.(empty($post->ID) ? rand() : $post->ID);
$output = '<form id="passwordform" action="' . get_option('siteurl') . '/wp-pass.php" method="post">
<p>' . __("Sorry, but You're Not so cool to see this... try to enter a valid password:") . '</p>
<p><label for="' . $label . '">' . __("Password:") . ' <input name="post_password" id="' . $label . '" type="password" class="password" size="20" /></label> <input type="submit" name="Submit" id="submit" value="' . __(" ") . '" /></p>
</form>
';
return apply_filters('the_password_form', $output);
}
    Reemplazando un paragraph tag (p) por un header tag (h2) y así resaltar mejor algún aviso, o añadiendo alguna imagen simbólica, fijando algún ID para la form tag (form) para así poder acceder a sus elementos y darles estilo, etc.
Lo dejo a tu creatividad, yo por mi parte dejo mi apenas modificado código y su drástico resultado, respectivamente:


Después de añadir un par de identificadores y clases al mismo código de arriba

El punto aquí es que desates tu imaginación.

Detalles a tomar en cuenta

Quiza el texto por default desplegado cambie un poco por la versión de WP, asi mismo por el idioma en el que este instalado; en dado caso solo debes buscar en el directorio ../wp-includes/ por el texto. Estoy seguro casi no cambiara la estructura y sera el mismo procedimiento.
  • En caso de que utilices el clásico bloc de notas como editor predeterminado, te recomiendo que busques por Notepad++. Seguramente te hará la vida bella,

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate