Establecer el tiempo de expiración del token de la rest api de WordPress

Para este caso estamos utilizando el plugin JWT Authentication for WP REST API que nos facilita el trabajo a la hora de configurar la autenticación a través de la rest API de WordPress.

Si queremos establecer un tiempo de expiración personalizado para el token y que después de ese tiempo ya no se pueda utilizar y el usuario no pueda acceder, podemos hacerlo a través del siguiente código utilizando el filtro «jwt_auth_expire»:

Cambiar el valor de $expire a vuestras necesidades. Siempre teniendo en cuenta que se trata de segundos.

En el ejemplo lo he establecido a 1 hora.

Saludos y ánimo.

Crear posts y traducciones en WordPress para WPML con código

En el tutorial crear un posts de WordPress con código te explicaba mismamente eso, pero en esta ocasión vamos a ir un poco más allá para crear no sólo el post o la entrada sino que vamos a crear, publicar y conectar las traducciones de un mismo post.

Creo que no hace falta decirlo pero vaya usted a saber. Necesitas tener instalado WPML y para el ejemplo que te voy a mostrar, 3 idiomas configurados en WPML. En este caso yo tengo configurados «español», «inglés» y «euskera».

El idioma que he configurado como «principal» o «por defecto» en WPML es «español».

Aclarado esto, vamos al lío:

Lo que voy a hacer es crear una función donde crear el contenido de cada post: «título», «contenido» y «estado». Almaceno el contenido de cada idioma en un array para crear cada unos de los posts por separado y luego ya los conectaré.

Por ejemplo, para crear el contenido en español:

    $post_original_es = array(
        'post_title'    => 'Título del post en español',
        'post_content'  => 'Contenido del post en español y bla, bla, blac...',
        'post_status'   => 'publish'       
    );

Y para crear el contenido en inglés:

    $post_traducido_en = array(
        'post_title'    => 'My post title - English',
        'post_content'  => 'My post content in english and ble, ble, ble...',
        'post_status'   => 'publish',
    );

De momento no pongo el de euskera porque es más de lo mismo pero en otro idioma.

Como puedes observar, creo un array con el contenido que quiero, un array por cada idioma.

De momento no he publicado nada, sólo he creado esos arrays para preparar el contenido que publicaré.

Ahora voy a utilizar la función wp_insert_post() que ya usé en el tutorial que te comentaba al inicio. Lo que hace es precisamente eso, crear el post en WordPress y como el estado está establecido a «publish», pues los publicará, de esta forma:

$post_original_es_id = wp_insert_post( $post_original_es );
$post_traducido_en_id = wp_insert_post( $post_traducido_en );

Con estas dos líneas que acabo de poner, lo que hago es publicar dos posts, cada uno con su información. Pero ¡Ojo! todavía no están conectados. Cada uno va a su bola, ahora mismo no tienen nada que ver el uno con el otro.

Pues bien, este código mas el relativo al tercer idioma, lo metemos en una función y al final de la misma devolvemos un array con estos 3 arrays de posts.

function nuevos_posts_para_publicar() {
    $output = array(); // array que contendrá los posts para publicar
 
    // Crear el post original en español
    $post_original_es = array(
        'post_title'    => 'Título del post en español',
        'post_content'  => 'Contenido del post en español y bla, bla, blac...',
        'post_status'   => 'publish',
    );
 
    // Crear el contenido del post para inglés
    $post_traducido_en = array(
        'post_title'    => 'My post title - English',
        'post_content'  => 'My post content in english and ble, ble, ble...',
        'post_status'   => 'publish',
    );
    // Crear el contenido del post para euskera
    $post_traducido_eu = array(
	'post_title'    => 'Nire mezuaren izenburua - Euskara',
	'post_content'  => 'Nire mezuaren edukia euzkaraz eta bleu, bleu, bleu...',
	'post_status'   => 'publish',
    );
 
    // Insertar los 3 posts en la base de datos con wp_insert_post();
    $post_original_es_id = wp_insert_post( $post_original_es );
    $post_traducido_en_id = wp_insert_post( $post_traducido_en );
    $post_traducido_eu_id = wp_insert_post( $post_traducido_eu );
 
    return $output = array(
        'original' => $post_original_es_id,
        'traduccion_en' => $post_traducido_en_id,
	'traduccion_eu' => $post_traducido_eu_id
    );
}

Hasta el momento todo bien. Puedes ejecutar este código para que lo que hacer y te darás cuenta que crea un post en cada idioma, sin más. Todavía no hay magia.

Ahora vamos a crear otra función que hará la conexión entre los 3 posts, el original en español y los otros dos en inglés y euskera.

Esta función recogerá lo que ha retornado la función anterior como $output y lo recoge, por ejemplo así:

$nuevos_posts_ids = nuevos_posts_para_publicar();

Perfecto, ya tengo los tres posts en la nueva función para trabajar con ellos.

En primer lugar establecemos el tipo de elemento con un el filtro wpml_element_type de WPML de esta forma:

$wpml_element_type = apply_filters( 'wpml_element_type', 'post' );

Ahora, obtengo información del idioma original para usarlo más adelante. De esta forma:

$get_language_args = array('element_id' => $nuevos_posts_ids['original'], 'element_type' => 'post' );
$original_post_language_info = apply_filters( 'wpml_element_language_details', null, $get_language_args );

Como ves, uso el filtro wpml_element_language_details de WPML.

Ahora que ya tengo los detalles del idioma orginal (español), voy a establecer los detalles de los otros dos idiomas pero para este ejemplo pongo solo uno, ya lo tendrás todo al final del tutorial.

$set_language_args_en = array(
   'element_id'    => $nuevos_posts_ids['traduccion_en'],
   'element_type'  => $wpml_element_type,
   'trid'   => $original_post_language_info->trid,
   'language_code'   => 'en',
   'source_language_code' => $original_post_language_info->language_code
);

Ya ves. Simplemente creo un array con una serie de información que nos va a hacer falta, como el id del post, el tipo, que ya había establecido anteriormente, el código del idioma y el idioma original.

Por último, ejecuto una acción de WPML con los argumentos que acabamos de establecer para inglés. De esta forma:

do_action( 'wpml_set_element_language_details', $set_language_args_en );

De esta forma, WPML ya sabe qué post tiene que conectar y con qué post.

Más información sobre wpml_set_element_language_details.

Ya lo tienes todo para crear traducciones a manta.

Lo suyo sería crear un «trigger» para que se ejecutara esta función pero este caso es algo diferente ya que que si lo dejamos así y lo metemos en el ‘wp_footer‘ pues no pararía de crear posts y eso no interesa.

Como hace poco publiqué un post sobre cómo crear cron jobs en WordPress, pues me he tomado la libertad de añadir para que puedas probarlo y ejecutar el cron cuando quieras y vayas viendo los resultado. Pero eso si, como esto es algo más «gordo», no nos quedaríamos aquí sino que tal vez habría que añadir código para que se borraran todos los posts antes de crear los nuevos.

Lo que molaría es sincronizar los posts. Que es el caso. El mío, me refiero. La información de los posts la traemos de una base de datos externa que no tiene nada que ver con WordPress pero tenemos un campo para saber cuando se hizo el último cambio del contenido y así, comparando ese campo con el correspondiente campo en nuestro WordPress, podemos saber si tenemos o no tenemos que eliminar ese post y crearlo de nuevo. Cuando digo post, me refiero al post en los 3 idiomas, ok?

Pero bueno, de lo que se trata es de que lo pruebes y lo entiendes y para eso creo que con un cron job es suficiente.

A continuación tienes todo el código:

Espero que te haya gustado este tutorial y no dejes de comentarme cosas relacionadas con este tutorial, ok?

Venga, mucho ánimo!

Cómo crear tareas programadas en WordPress ( cron jobs)

Las tareas programadas son muy útiles en ciertos casos.

Habrá tareas que necesites que se ejecuten cada cierto tiempo sin tener que estar pendiente de ejecutarlas tu mismo/a en esos momentos. Eso es inviable, no podemos estar pendientes en ciertos momentos para ejecutar una función que necesitamos que se ejecute en cierto momento o en ciertos momentos.

Pues bien, para eso, WordPress dispone de un mecanismo que nos permite programar la ejecución de tareas o funciones en código y es muy sencillo como verás a continuación.

Antes, debo avisarte de que las tareas programadas de WordPress no son como las que puedas programar a nivel de servidor ya que las de WordPress dependen de que tengas visitas o por decirlo de otra forma. Si no tienes visitas en el momento en que tienes programada la tarea, no se ejecutará en ese momento sino que se ejecutará en el momento que tenga lugar la primera visita después de esa programación. En cambio, los cron jobs que configuras a nivel de servidor no depende de esto sino que se ejecutarán en el momento preciso. Pero en este tutorial te voy a enseñar cómo puedes crear tareas programadas en WordPress, la otras las dejaremos para otro tutorial si te parece interesante.

Al lío. Para crear una tarea programada en WordPress, crearemos un hook y le asignaremos una función que queramos que se ejecute.

Para este ejemplo he creado el hook «cron_borrar_todos_posts» y le asigno la función «oaf_borrar_todos_posts» de esta manera:

add_action('cron_borrar_todos_posts', 'oaf_borrar_todos_posts');

Ahora lo que tenemos que hacer es crear un evento o programación para decirle a WordPress que cree esa programación en el momento y la periodicidad de la misma como por ejemplo:

wp_schedule_event((strtotime('24:00:00')), 'daily', 'cron_borrar_todos_posts');

Con esto le estamos diciendo a WordPress que todos los días, a las 24 horas ejecute la función «cron_borrar_todos_posts«.

Para más información sobre wp_schedule_event(), haz click por aquí.

También te animo a que le eches un vistazo a la función wp_get_schedules() para que entiendas mejor la parte de las recurrencias de las tareas programadas.

No está de más añadirle un condicional para asegurarnos de que no existe ya esa tarea programada de esta forma:

if (! wp_next_scheduled('cron_borrar_todos_posts')) {
	wp_schedule_event((strtotime('24:00:00')), 'daily', 'cron_borrar_todos_posts');
}

Como ves es muy secillo.

Ah, bueno, nos falta la función que va a ejecutar. Para este ejemplo he creado una función que borra todos los posts:

function oaf_borrar_todos_posts(){
	$todos_posts = get_posts( array('post_type'=>'post','numberposts'=>-1) );
	foreach ($todos_posts as $unpost) {
		wp_delete_post( $todos_posts->ID, true );
	}
}

Y para que que lo tengas todo en un mismo sitio y ordenado, te dejo el código completo en un gist:

Personalmente me parece una herramienta muy útil para ciertos casos que yo mismo uso según para qué.

En otro tutorial te voy a enseñar un plugin para poder ver y semi-gestionar estas tareas programadas de WordPress y así puedas tener una visión más gráfica de lo que está ejecutando WordPress y cuando.

Sin más, nos vemos…

Condicionales WordPress: Comprobar si es un fichero de plantilla

WordPress pone a nuestra disposición un buen número de funciones para realizar comprobaciones o chequeos de dónde estamos para que nosotros realicemos una acción u otra en función del resultado de esa función.

Pues bien, hoy vengo a hablarte de «is_page_template()«. Esta función, como ya habrás adivinado, nos permite comprobar si se trata de una template.

El modo sencillo sería este:

Ahora bien, si queremos comprobar una template en concreto lo que podemos hacer es esto:

Y así, sin más, muy sencillo pero muy útil. Pero échale un vistazo a la documentación de «is_page_template()» por si tienes alguna duda.

Ahora lo que hagas con este condicional es sólo cosa tuya, de tu imaginación y de tus necesidades.

Espero que te sea de utilidad.

Seguimos…

Añadir css en el backend de WordPress

Pues si, hoy me ha hecho falta volver a hacer esto y ya sabes, no te acuerdas de cómo lo hiciste la última vez y toca buscar un poco.

La idea es que queremos aplicar ciertas reglas css dentro de la administración de WordPress. En mi caso lo quiero aplicar para unas cosillas de Advanced Custom Fields. Que no viene al caso pero ahí queda.

Como siempre, lo ideal es tener todo bien organizado y en mi caso, en este caso, he creado un fichero «admin.css» dentro del directorio «assets/css/» del tema activo. Por lo que quedaría «/assets/css/admin.css«. Y en este fichero puedes añadir todo el css que queráis aplicar en tu backend de WordPress.

Ahora bien, para que este css afecte al backend de WordPress, tendremos que usar el hook «admin_enqueue_scripts» de la misma forma que lo hacemos cuando encolamos para el front con «wp_enqueue_scripts» o styles.

El código que hay que incluir en el fichero functions.php de vuestro tema o en otro fichero si es que lo tienes organizado así es el siguiente:

Ya ves que es muy sencillo y fácil de implementear.

Pruébalo y me cuentas.

Saludos y mucho ánimo!

Añadir contenido en la cabecera de los productos o en productos en concreto

Vuelvo con otro pequeño código un tanto extraño.

La verdad es que, aunque parezca increíble, simpre me encuentro con tareas un poco «raras» que necesitan mis clientes y esta es una de ellas.

La idea es añadir un texto que podría se un «Anuncio» o «Aviso» en la parte superior de las páginas de producto individual y ya puestos, que se muestre sólo en la página de un producto en concreto. Voy a explicarte cómo hacer los dos casos, ok?

Pues vamos allá!

A modo de ejemplo, te muestro una captura en la que puedes ver el anuncio de «¡¡ESTE ES NUESTRO PRODUCTO ESTRELLA!!». Eso si, muy sencillo porque el objetivo de esta entrada es mostrarte cómo hacerlo y luego tu puedas darle aspecto y diseño a este «anuncio».

Mostrar anuncio en la cabecera de los productos o en productos en concreto

Y este es el código necesario:

Lo único que tendríamos que hacer sería modificar el texto del «h2» a nuestro gusto y ya puestos poner un poco de estilos a la clase «anuncio-estrella».

Ahora vamos a añadir un poco de código para que el anuncio se muestre sólo en uno de los productos y para ello usaremos el «id» del producto.

Supongamos que el producto en el que queremos que se muestre el anuncio tiene la «id» «18». Añadimos el código «&& get_the_id() == 18» a la comprobación del «if». Total, que nos quedaría así:

Fácil y sencillo, ¿Verdad?

Claro que esto lo podríamos adaptar de muchas maneras y formas diferentes. Tanto para que se muestre en otras circunstancias como en categorías, etiquetas, etc… así como para que ese anuncio se muestre en cualquier otro sitio de nuestra web. Lo dejo a tu imaginación.

Pero antes de terminar…

El video

Venga, a por el siguiente…

Cómo traducir cualquier texto en WordPress

Para realizar algunas traducciones en algún tema o plugin de WordPress, hay varias formas de hacerlo.

El motivo puede ser variado, desde que ese texto no esté traducido a nuestro idiomar hasta que, por el motivo que sea, no nos convence la traducción que existe en nuestro idioma y necesitemos cambiarla para adaptarla a nuestras necesidades.

En cualquier caso, yo voy a comentar la opción de hacerlo mediente un plugin o hacerlo mediente código.

Traducir cualquier texto en WordPress usando un plugin: Loco Translate

Loco translate es un plugin fabuoso y muy ulizado que podemos utilizar tanto para traducir o cambiar traducciones de plugins y temas del repostorio de WordPress como el mismo WordPress así como plugins y temas privados que hayamos comprado.

Como digo es una solución fácil de usar.

El plugin lo podemos encontrar en el repositorio oficial de WordPress en el siguiente enlace:

https://es.wordpress.org/plugins/loco-translate/

Eso por una parte. Ahora veamos cómo hacerlo usando código.

Traducir cualquier texto en WordPress usando código.

Loco Translate es fantástico, como ya he dicho antes pero tal vez no sea la mejor solución si lo que queremos es traducir unas pocas palabras o incluso una sola. No merece la pena y para esos casos tal vez sea mejor utilizar un poco de código sencillo.

Utilizaremos el siguiente trocito de código:

Lo que estamos haciendo es el ejemplo es traducir o cambiar la traducción de «Agotado» por «Sacabao!«.

Cómo traducir cualquier texto en WordPress

Cómo traducir cualquier texto en WordPress

Entonces, si queremos cambiar la traducción de cualquier palabra, modificaríamos estos campos y listo.

Ahora bien, ¿Y si el texto no está traducido?

En el ejemplo anterior el texto ya estaba traducido y lo que hemos hecho ha sido cambiar la traducción y ahora lo que queremos es traducir un texto que no está traducido por el motivo que sea.

En este caso haremos algo parecido pero usando la variable $original como se indica a continuación:

De manera similar, modificamos la palabra original y la traducción y listo!

Espero que os haya sido de ayuda.

Cualquier cosa me dejáis un comentario.

Saludos y mucho ánimo!

Obtener el contenido de cualquier post en WordPress

Cuando estamos desarrollando en WordPress, picando código en los diferentes ficheros php, ya sabemos que nos muestra el contenido de ese fichero como es el caso de los ficheros de archivo.

En el ejemplo que os presento queremos ya tenemos un fichero archive-hook.php donde tenemos implementado todo el código necesario para que muestre todos los posts del CPT «hook» en forma de listado como nosotros/as queremos pero, la casualidad es que también queremos mostrar algún tipo de contenido más estático en la parte superior de esa página, como si fuera el ancabezado de la página de archivo y después que muestre el listado que ya tenemos preparado en el código.

Dependiendo de cómo lo tengamos, es posible que al crear la página «hooks» en el panel de administración de WordPress, no nos muestre ese contenido y solo nos muestre lo que tenemos implementado en el fichero «archive-hook.php«.

Nota: He dicho crear la página «hooks» porque se trata de un CPT y tenemos reescrita el slug por «hooks«.

Bien, en estos casos vamos a tener que echar mano de una función de WordPress para coger el contenido de la página «hooks» y decirle por código que nos la muestre antes del listado de los hooks que tenemos implementado en el fichero «archive-hook.php«.

Esto que comento, podemos hacerlo usando la función: «get_post();«

A continuación podemos ver el formato y parámetros de esta función:

get_post( int|WP_Post|null $post = null, string $output = OBJECT, string $filter = 'raw' )

Tenéis más información sobre la función get_post() en el siguiente enlace: https://developer.wordpress.org/reference/functions/get_post/

Para el caso que nos ocupa, lo único que necesitamos es el ID del post (en este caso, página) que tiene el contenido que queremos mostrar por código antes del listado.

Por consiguiente, una forma de hacerlo sería la siguiente:

Con esto conseguimos mostrar el contenido de ese post que hemos creado en forma de página, entrada o de otro tipo en nuestro código.

Es una forma sencilla de tener el control de la parte estática a través del editor de WordPress y dejar la parte dinámica al código.

Espero que os sea de utilidad y cualquier duda o sugerencia, ya sabéis, dejadme un comentario o hacédmelo saber de cualquier otra forma.

Saludos a todos/as!

Comprobar si un post tiene asignado un término de una taxonomía en WordPress

Puede ser que en un momento dado necesitemos saber si un post, del tipo que sea, tiene o no asignado un término de una taxonomía en concreto.

Antes de nada, vamos a sentar las bases para saber de lo que estamos hablando y lo que vamos a hacer, ok?

Os pongo el siguiente ejemplo:

Tenemos un Custom Post Type «Hook» que usamos, como ya habréis adivinado, para crear información de hooks de WooCommerce, cada hook en un post.

Este CPT «hook», tiene una taxonomía a la que llamaremos «tipo» en la que recogeremos el tipo de hook si es «Action» o es «Filter».

Ahora bien, en nuestro fichero de archivo de el cpt «hook», necesitamos saber si cada uno de los hooks (posts del cpt hook) es «action» o «filter » y para eso podemos usar la siguiente función:

has_term( string|int|array $term = '', string $taxonomy = '', int|WP_Post $post = null )

Podéis encontrar más información sobre esta función en: https://developer.wordpress.org/reference/functions/has_term/

Ahora bien, como en nuetro fichero de archivo de hook tenemos todo este tinglado montado en un loop que recorre todos los posts de tipo hook para ir pintándolos en el front, ahí es donde vamos a meter esta función para comprobar si el post es un action o es un filter.

Pero antes, tenemos que saber que el motivo por que el cual queremos saber si es un «action» o un «filter» es para añadirle una clase css en cada caso porque queremos pintar de manera diferente los actions y los filters.

Por consiguiente nuestro código quedaría algo así:

Recordemos que este código está dentro de un loop en el que vamos recorriendo todos los posts del cpt «hook».

Ahora, vemos un poco por encima la función que hemos usado y cómo la hemos usado.

has_term( 'action', 'hook-type' );

Como podemos ver, en nuestro caso hemos incluído como primer parámetro ‘action’ que es el slug del término de taxomía que queremos comprobar y como segundo parámetro hemos añadido el slug de la taxonomía ‘hook-type’.

De esta forma comprobamos si el post actual tiene asignado el término ‘action’ y si es así, establecemos un valor a la variable que vamos a usar para guardar el nombre de la clase css.

Espero que me haya explicado bien pero de todas formas, cualquier duda que tengáis sobre esto, me lo podéis comentar cuando queráis e intentaré ayudaros en todo lo que pueda.

Saludos a tod@s!

WordPress Snippet: Reemplazar el saludo al usuario

Hoy volvemos como no, con un nuevo WordPress Snippet.

Se que a muchos os gustan estos trocitos de código y por eso los voy poniendo. Además, así me da tiempo a preparar otro tipo de contenido con el cual estoy ahora y que poco a poco iré anunciando para cuando llegue el momento.

Pues bien, en este post vamos a hacer algo bien sencillo que no es otra cosa que cambiar la palabra de saludo que WordPress pone delante del nombre del usuario logueado, en la parte superior derecha de la pantalla.

Tal vez con un poco más de luz:

WordPress snippet - cambiar el saludo al usuario

Eso es, a este saludo me refiero. En concreto a la palabra «Hola«.

Si, esta palabra es posible modificarla de otras formas como por ejemplo modificando el fichero «.po» de la traducción al Español de WordPress pero aquí estamos para hacer cosas con WordPress, para trastear y para practicas programación que es lo que nos gusta, ¿Verdad?

El Snippet

A los que ya visitáis esta web de vez en cuando igual os choca un poco que ponga este título.

Pues bien, éste va a ser el primero de muchos WordPress Snippets que vamos a hacer y que a partir de ahora procuraré hacerlo de dos formas. La primera de ellas será la que venimos haciendo hasta ahora para incluir en el fichero «functions.php» de nuestro tema y la segunda será creando un plugin.

Los plugins que crearemos al principio serán muy sencillos, sin complicaciones pero según vayamos avanzando, intentaré complicarlos para que aprendáis todo lo que podáis con mis consejos.

Manos a la obra

Nos centramos en este Snippet en concreto y para ello nos queda claro que lo que tiene que hacer es sustituir la palabra «Hola» por otra palabra que nos guste para saludar a los usuarios registrados. En mi caso voy a sustituirla por «Qué pasa«.

Crearemos la función «oaf-wp-reemplazar-hola«. Aquí a vuestro gusto…

Bueno, como es pequeña, pongo la función y a continuación explico un poco el código.

function oaf-wp-reemplazar-hola( $saludo ) {
    $nuevo_saludo = 'Que pasa';
    if ( is_user_logged_in() ) {
        $text = str_replace( 'Hola', $nuevo_saludo, $saludo );
    }
    return $saludo;
}

En primer lugar creamos una variable para almacenar la palabra que queremos que sustituya a «Hola«. Esta variable la he llamado $nuevo_saludo para que quede claro de lo que estamos hablando.

Posteriormente comprobamos que el usuario esté logueado y si es así procede a reemplazar el texto «Hola» por el que contiene la variable $nuevo_saludo y lo guarda en la variable $saludo.

Par finalizar, retornamos el valor de $saludo y función lista.

Ahora nos queda el filtro o filter, como era de esperar.

El filtro / filter

En este caso utilizaremos el «gettext» junto con el nombre de la función que acabamos de crear.

Por consiguiente el filtro quedaría así:

add_filter( 'gettext', 'oaf-wp-reemplazar-hola' );

Fácil y sencillo, ¿Verdad?

El código

Creo que no hay nada más que explicar sobre esto por lo que voy a poner el código completo del snippet a continuación para que podáis disponer de el cuando queráis.

El desenlace

Eso es, si. Con desenlace me refiero a ver lo que nos ha hecho este snippet y para ello basta con mirar de nuevo en la parte superior derecha de la pantalla y ver cómo no saluda ahora:

Crear un post de WordPress con código

Hoy vamos a ver cómo crera un post mediente código.

Algo que a simple vista puede no tener ningún sentido pero que si lo pensamos detenidamente puede que existan circunstancias en las que será necesario utilizar esto como parte de un plugin o código más extenso.

Es el ejemplo que me ocupa ahora mismo en uno de los proyectos en los que estoy trabajando que no es otro que crear contenido de un tipo de contenido personalizado a partir de los datos que se solicitan a la base de datos. No voy a comentar más sobre esto porque luego todo se sabe…

Bueno, a lo que vamos…

wp_insert_post()

La función que vamos a utilizar para crear un post en este caso es wp_insert_post(). Como su nombre indica o podemos intuir, nos va a permitir insertar o crear un post.

Teneís información sobre la función wp_insert_post() en este enlace.

Como vamos a hacerlo sencillo os pongo un ejemplo a continuación y luego lo comentamos un poco:

Si probáis el código anterior, tened cuidado y hacedlo en un sitio en desarrollo o mejor de pruebas en local. Os digo esto porque aunque el código hace lo que tiene que hacer, no hemos incluído ningún check para saber si ya existe un post como el que estamos creando y por consiguiente se crearán posts iguales constantemente.

Yo he hecho la prueba para que os hagáis una idea y lo podéis ver en la siguiente captura:

Esto es sólo de un momento, unos 20 segundos, si le dejo más tiempo, seguirá creando posts y posts. Un sin parar, vamos…

Bien, ahora analicemos un poco la función que hemos usado.

Hemos usado varias variables para que guarden el contenido que queremos para usarlas dentro del array. Estas variables contendrásn la ID del autor, el slug, el título y el contenido del post: $author_id, $slug, $title, $content.

Postermiormente utilizamos la función wp_insert_port() para crear el post con el contenido que queremos usar dentro de un array.

No creo que haga falta mucha explicación porque se reconocen bastante bien las diferente opciones.

Comprobar si el post ya existe

Para este caso voy a crear una función que compruebe o más bien compare el slug del post que quiero crear con todos los slugs que ya hay creados. Es más, en esta función le especifico que mire sólo en posts.

Podríamos usar esto también con custom posts types osea que ahí queda eso. Pero como digo, para este ejemplo lo haremos con posts.

El código de la función que os comento es el siguiente:

Como podéis observar, mediante el array le pasamos los datos de los posts que queremos que chequee.

Esta función no tiene mucho más misterio, simplemente hace na consulta de todos los posts que cumplan los argumentos que le pasamos en el array.

Esta función es la que vamos autilizar para completar nuestro snippet.

El código completo

Una vez que hemos creado las dos partes que van a componer este snippet, las juntamos y añadimos un condicional para que chequee si el slug ya existe si no existe creará el post con los datos que le indicamos en el array y si ya existe no lo creará.

Ah, bueno, algo muy importante… el hook.

El hook que usaremos será «after_setup_theme» y es en ese hook donde ejecutaremos la función que creará el post.

Aquí tenéis el código comleto para vuestro uso y disfrute:

Y el resutado, como era de esperar será el siguiente:

Sin mas, nos vemos en el siguiente.

Aplicar CSS personalizado en el área de administración de WordPress

Hacía tiempo que no tenía necesidad de hacer esto pero estos días he tenido que hacer unas modificaciones en el área de administración de WordPress para que algunas cosas estén mejor para un cliente porque en este caso el cliente va a gestionar y hacer diferentes cambios en su web periodicamente.

Pues bien, al grano…

Para poder inyectar css que tenga efecto en el área de administración de WordPress deberemos utilizar el hook: ‘admin_head‘. A partir de aquí, comenzamos a hacer las pruebas.

Como siempre, hay varias formas de hacer una cosa por lo que la manera más sencilla de añadir css al área de administración de WordPress sería algo como lo siguiente:

La manera anterior es totalmente válida pero a mi personalmente me gusta tener las cosas bien ordenadas y en fichero diferentes por lo que ahora lo que voy a hacer es crear un fichero dentro del directorio «css» del tema hijo para estos cambios relativos al área de administración.

Para ello utilizaré el hook ‘admin_enqueue_scripts’ y creamos la función que añadirá el fichero css que ya hemos creado en el directorio ‘css’ de nuestro tema hijo.

Y hasta aquí llega el tutorial de hoy. Espero que os sea de utilidad.

Saludos y hasta la próxima!

Ir al contenido