WordPress 6.2.0: La función get_page_by_title() quedó obsoleta.
Publicado el 30 - Mar - 2023
En WordPress 6.2, la función get_page_by_title() ha quedado obsoleta a favor de usar WP_Query. A diferencia de la función obsoleta, WP_Query solo se puede ejecutar después de que se hayan cargado los complementos y las funciones conectables, en el action hook plugins_loaded o de forma posterior.
Debido a las limitaciones con la consulta de la base de datos de funciones obsoletas, podría arrojar resultados diferentes según la versión de la base de datos y/o el motor utilizado. Cambiar a WP_Query nos asegura recibir los mismos resultados independientemente de la configuración del servidor.
- Primera aproximación.
Para lograr una consulta de base de datos equivalente a través de WP_Query, se pueden usar los siguientes argumentos:
$query = new WP_Query(
array(
'post_type' => 'page',
'title' => 'Sample Page',
'post_status' => 'all',
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'orderby' => 'post_date ID',
'order' => 'ASC',
)
);
if ( ! empty( $query->post ) ) {
$page_got_by_title = $query->post;
} else {
$page_got_by_title = null;
}
Así que usamos la función get_page_by_title() para conseguir los links a las páginas de nuestros sitio web de forma personalizada, éstos habrán dejado de funcionar si hemos actualizado a la versión 6.2. Teniendo todo esto en cuenta, y suponiendo que tenemos una función, por ejemplo, get_page_object() -puesto que va a devolver un objeto tipo página- en nuestra plantilla functions.php, deberemos sustituir la función obsoleta por esta nuestra, quedando así:
<a href="<?php echo get_page_link( get_page_object('Blog')->ID);?>" class="">Blog</a>
En functions.php nuestra función personalizada quedaría así:
function get_page_object( $title) {
$query = new WP_Query(
array(
'post_type' => 'page',
'title' => $title,
'post_status' => 'all',
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'orderby' => 'post_date ID',
'order' => 'ASC',
)
);
if ( ! empty( $query->post ) ) {
$page = $query->post;
} else {
$page = null;
}
return $page;
}
- Segunda aproximación.
Si por cualquier razón no queremos usar la clase WP_Query y queremos que directamente nuestra función nos devuelva el link a la página podemos hacer:
/**
* Retrieves a page link based on the page title
* @param $title String Page title
* @return $link String Page link
*/
function get_page_link_by_title( $title ) {
$args = array(
'title' => $title,
'post_type' => 'page',
);
$array_of_pages = get_posts( $args );
$page = $array_of_pages[0]; // The one and only element in array
$id = $page->ID; // Grab de page ID
$link = get_permalink( $id ); // Get the permalink
return $link;
}
Gracias por la ayuda.
Deja una respuesta