8 códigos para extender las funcionalidades de WordPress

Hace mucho tiempo que no os pongo por aquí códigos para agregar nuevas funcionalidades a tu sitio web desarrollado con WordPress. En este ocasión te traigo 8 snippets que te vendrán de perlas, si lo que quieres es tener nuevas características en tu CMS. Por regla general, tendrás que agregar los códigos en el archivo functions.php del tema actual, y los que no, te lo indico igualmente.

Shortcode para mostrar archivos externos

Si debes mostrar el contenido de ficheros externos dentro de tus posts y páginas, puedes hacerlo mediante un shortcode. Para ello introduce el siguiente código dentro del functions.php de tu tema.

function show_file_func( $atts ) {
 extract( shortcode_atts( array(
 'file' => ''
 ), $atts ) );
 
 if ($file!='')
 return @file_get_contents($file);
}
 
add_shortcode( 'show_file', 'show_file_func' );

Así es cómo se utilizaría el shortcode.

[show_file file="https://google.com"]

Eliminar la imagen destacada cuando elimines un post

Este código hará que se elimine la imagen destacada asociada a un post, cuando el post en cuestión se elimine. Inserta este código dentro del fichero functions.php del tema.

add_action( 'before_delete_post', 'wps_remove_attachment_with_post', 10 );
function wps_remove_attachment_with_post($post_id) {
 if(has_post_thumbnail( $post_id ))
 {
 $attachment_id = get_post_thumbnail_id( $post_id );
 wp_delete_attachment($attachment_id, true);
 }
}

Definir una imagen por defecto para tus imágenes destacadas

Este código te permite definir una imagen por defecto para aquellos posts en los que no hayas añadido una imagen por defecto.

Debes pegar este código en donde quieres mostrar la imagen destacada, o si no la hay, la imagen por defecto. Por regla general, tendrás que agregarlo al index.php o al single.php. Edita la línea 4 y reemplaza la URL con la URL de tu imagen por defecto.

https://seox.es/wp-content/uploads/2017/10/unnamed-file-c.jpg if ( has_post_thumbnail() ) {
the_post_thumbnail();
} else { ?>
https://seox.es/wp-content/uploads/2017/10/unnamed-file-c.jpg the_title(); ?>
https://seox.es/wp-content/uploads/2017/10/unnamed-file-c.jpg } ?>

Mover los scripts y las hojas de estilo al footer

Si lo que quieres es mejorar la velocidad de carga de tu sitio web, una muy buena idea es la de mover los scripts y las hojas de estilo al footer. En este ejemplo puedes ver cómo hacerlo en WordPress, pero cualquier desarrollador con un poco de experiencia sabrá cómo modificar el código para trasladar dichas inserciones al final del documento.

Primero, abre tu fichero functions.php y pega el siguiente código.

/**
 * Filter HTML code and leave allowed/disallowed tags only
 *
 * @param string $text Input HTML code.
 * @param string $tags Filtered tags.
 * @param bool $invert Define whether should leave or remove tags.
 * @return string Filtered tags
 */
function theme_strip_tags_content($text, $tags = '', $invert = false) {

preg_match_all( '/<(.+?)[s]*/?[s]*>/si', trim( $tags ), $tags );
 $tags = array_unique( $tags[1] );

if ( is_array( $tags ) AND count( $tags ) > 0 ) {
 if ( false == $invert ) {
 return preg_replace( '@<(?!(?:'. implode( '|', $tags ) .')b)(w+)b.*?>.*?@si', '', $text );
 }
 else {
 return preg_replace( '@<('. implode( '|', $tags ) .')b.*?>.*?@si', '', $text );
 }
 }
 elseif ( false == $invert ) {
 return preg_replace( '@<(w+)b.*?>.*?@si', '', $text );
 }

return $text;
}

/**
 * Generate script tags from given source code
 *
 * @param string $source HTML code.
 * @return string Filtered HTML code with script tags only
 */
function theme_insert_js($source) {

$out = '';

$fragment = new DOMDocument();
 $fragment->loadHTML( $source );

$xp = new DOMXPath( $fragment );
 $result = $xp->query( '//script' );

$scripts = array();
 $scripts_src = array();
 foreach ( $result as $key => $el ) {
 $src = $result->item( $key )->attributes->getNamedItem( 'src' )->value;
 if ( ! empty( $src ) ) {
 $scripts_src[] = $src;
 } else {
 $type = $result->item( $key )->attributes->getNamedItem( 'type' )->value;
 if ( empty( $type ) ) {
 $type = 'text/javascript';
 }

$scripts[$type][] = $el->nodeValue;
 }
 }

//used by inline code and rich snippets type like application/ld+json
 foreach ( $scripts as $key => $value ) {
 $out .= '';
 }

//external script
 foreach ( $scripts_src as $value ) {
 $out .= '';
 }

return $out;
}

Una vez hecho esto, edita el fichero header.php y reemplaza el tag wp_head() por esto:

https://seox.es/wp-content/uploads/2017/10/unnamed-file-c.jpg
ob_start();
wp_head();
$themeHead = ob_get_contents();
ob_end_clean();
define( 'HEAD_CONTENT', $themeHead );

$allowedTags = '