WordPress 6.2.0: La función get_page_by_title() quedó obsoleta.



Publicado el 30 - Mar - 2023

deprecated, Enlaces, get_page_by_title(), Páginas | 2 comentarios    |  1349 Visitas


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:


PHP
$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í:


PHP
<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í:


PHP
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:


PHP
 /**
     *    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;
    }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  • Héctor dice:

    Gracias por la ayuda.