Cómo cambiar en wordpress el custom post type de la URL

Hay veces que necesitamos simplemente cambiar el slug de un tema que hemos instalado pero que no hemos creado nosotros. A veces ese tema tiene un custom_post_type llamado portfolio y nosotros queremos aprovecharlo para mostrar un contenido distinto como servicios, trabajos o productos.

Cuando utilizas un custom_post_type normalmente está definido también su slug, lo que aparece en la URL, como por ejemplo: http://url.com/portfolio/

Para cambiarlo tenemos que buscar la creación de ese custom dentro de functions.php del theme, algo parecido a esto:

function create_portfolio_post_types() {
register_post_type( 'portfolio',
array(
'labels' => array(
'name' => __( 'Portfolio', 'framework'),
'singular_name' => __( 'Portfolio', 'framework'),
'add_new' => __( 'Añadir Nuevo', 'framework' ),
...
),
'menu_icon' => get_template_directory_uri() . '/admin/images/photos.png',
'public' => true,
)
);
}
add_action( 'init', 'create_portfolio_post_types' );

y añadirle la función rewrite al final de todo:

...
'menu_icon' => get_template_directory_uri() . '/admin/images/photos.png',
'public' => true,

'rewrite' => array('slug' => 'servicios'),

)
);
}
add_action( 'init', 'create_portfolio_post_types' );

Más info en Codex

Cómo hacer condicionales sencillos en wordpress. 2/2

Continuando con los condicionales en wordpress recogidos en un post anterior, ahora voy a poner un par de ejemplos para hacer cosas un poco más complejas con estos condicionales.

La manera más fácil de hacer condicionales sin encontrar complicaciones de código o sintaxis es mostrar el if, el else y el elseif por separado, algo así:

<?php if ( is_home() ) : ?>
<h2><?php the_title(' '); ?></h2>

<?php elseif ( is_category () ): ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(' '); ?></a></h2>

<?php else : ?>
<h1><?php the_title(' '); ?></h1>

<?php endif; ?>

Este es el viejo ejemplo para adaptar contenido a SEO mostrando H1 o H2 según la página que muestre para evitar que no haya más de un H1, por ejemplo, pero puede aplicarse en infinitos casos. Hay que tener en cuenta que introducir funciones en php dentro de los condicionales sólo es posible de esta manera sin recurrir a redefiniciones de variables.

Os dejo un par de enlaces relacionados:

Todos los condicionales en wordpress Ejemplos sencillos de condicionales

Cómo hacer condicionales sencillos en wordpress. 1/2

Una de las funciones que más utilizaremos si desarrollamos bajo wordpress son los condicionales. Hay veces que queremos mostrar un contenido u otro según la página, mostrar algo sólo en algunas entradas, añadir una imagen o clase  a un div cuando es un usuario concreto o cuando queremos que analytics no se muestre si entramos a nuestra propia página como admin… para ello están los condicionales y wordpress ya tiene bastantes funciones predefinidas.

Los condicionales podemos mostrarlos dentro de un mismo php, y aunque en siguientes entradas explicaré cómo hacer cosas más complejas, este de momento será útil si sólo queremos añadir un texto o una imagen:

<?php
if( is_home() ):
echo 'Bienvenido a la página de inicio';

else:
<!-- vacio -->
endif;
?>

El mecanismo es sencillo, si está en la página home muestra el echo de debajo, para las demás no mostrará nada pero podemos complicarlo un poco, añadiendo dos condiciones, como por ejemplo:

<?php
if( is_home() ):
echo 'Bienvenido a la página de inicio';

elseif (is_page('Contacto') ):
echo 'Ponte en contacto conmigo';

else:
endif;
?>

En este caso la primera condición es la misma pero añade una segunda, en caso de que no se cumpla la primera muestra un texto distinto para la página contacto… y para el resto no muestra nada.

También podemos combinar condicionales:

<?php
if( is_single() AND is_author('Dam')):
echo '<img src="ruta/imagen1.jpg" alt="" />';

elseif (is_page('Contacto') OR is_page('Sobre mi')):
echo '<img src="ruta/imagen2.jpg" alt="" />';

elseif (is_page('Contacto') || is_page('Sobre mi')):
echo '<img src="ruta/imagen2.jpg" alt="" />';
else:
endif;
?>

En este tercer ejemplo el AND dice que si se cumplen las dos condiciones de estar en una entrada (single) y el autor es Dam aparecerá la imagen 1. Si por el contrario estamos en la página Contacto o (OR) Sobre mi, en cualquiera de las dos mostrará la imagen 2.

OR y || son lo mismo. AND y && son equivalentes también.

Para conocer todas las funciones predefinidas puedes consultar el códex de wordpress:

Todos los condicionales en wordpress

Cómo evitar aparecer en tus propias estadísticas en wordpress

Yo particularmente soy de los que no para de entrar y salir en las páginas que voy actualizando, compruebo, compruebo y vuelvo a comprobar, el problema: que altero las estadísticas reales.

Lo primero es localizar el script de analytics, si las has puesto tú mismo sabrás dónde encontrarlo, para este caso podemos crear un condicional en el archivo footer.php para que muestre el código si no eres un usuario registrado en la página.

<?php if (!$user_ID) : ?>

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-xxxxxxxxxx-1', 'damasogonzalez.com');
ga('send', 'pageview');
</script>

<?php endif; ?>

Para los casos en los que pongamos google analytics a través de un plugin, opción del theme o directamente no tengamos ni idea de dónde encontrarlo podemos crear una excepción en la página de google analytics.

Cuenta > Administrador > Filtros.
Os dejo 2 imágenes del proceso.

Evita aparecer en las estadísticas de google


Añade un script al footer de wordpress

Uno de los factores que cada vez cobran más importancia en SEO es la velocidad de carga, y uno de los elementos que pueden hacer más o menos rápida tu página es dónde colocas los scripts, por suerte, en el caso de wordpress puedes encolar algunos scripts a través del archivo functions.php

function javascripts_palfondo(){
(código javascript)
}
add_action('wp_footer', 'javascripts_palfondo');

Si lo que quieres es meter un script que ya maneja wordpress:

function javascripts_palfondo() {
wp_enqueue_script ('nombre-script', get_stylesheet_directory_uri() . '/js/nombre-script.js', array( 'jquery' ), '', true );
}
add_action('wp_enqueue_scripts', 'javascripts_palfondo');

Y si todo esto es un engorro siempre puedes recurrir a plugins como
BWP Minify