¿Cómo obtener la URL de la página por título en wordpress? (la función get_page_by_title() ha quedado obsoleta desde 6.2.0)

3 minutos de lectura

yo suelo

get_page_by_title() 

a veces en mi código, por ejemplo

get_page_by_title($article['title'], OBJECT, 'post');

pero ahora la documentación dice ya no puedo usarlo. Fue bastante conveniente con el fin de probar algunas funciones en las que no puedo usar ID debido a la creación de contenido en diferentes bases de datos para fines de prueba. ¿Hay alguna forma excepto usar WP_Query clase porque parece un dolor usarlo solo para obtener un enlace por el título de la publicación

estoy buscando algo como

get_url_by_title('title', 'post')

¿Alguna idea?

  • El aviso de obsolescencia en esa página ya le dijo: “Use WP_Query en su lugar”.

    – CBroe

    30 de marzo a las 10:47

  • O wordpress.stackexchange.com/a/377508

    – CBroe

    30 de marzo a las 10:49

  • @CBroe Sí, te entiendo, estaba preguntando “¿Hay alguna forma excepto usar la clase WP_Query porque parece un dolor?”. Se siente como una rebaja. Ahora tengo que usar una matriz de argumentos, consultar el objeto, mirar a través del objeto, etc. get_page_by_title() era conveniente Ahora no lo es.

    – DimitFromCave

    31 de marzo a las 3:58

Como se mencionó @CBroe en los comentarios, la mejor sustitución para obsoletos get_page_by_title() es get_posts() documentación. Ok, sé que la documentación dice: “Usar WP_Query en su lugar”, pero parece doloroso.

Así que volvamos a la solución. Conseguir un soltero página o publicación por título, use

$array_of_objects = get_posts([
    'title' => 'Post or page title',
    'post_type' => 'any',
]);
$id = $array_of_objects[0];//Be sure you have an array with single post or page 
$id = $id->ID;
$link = get_permalink($id);

Hay algunos momentos. 'post_type' => 'any' funciona mejor que un tipo de publicación en particular. No olvides eso get_posts() devuelve una matriz de objetos, por lo que debe referirse a una matriz y luego a un objeto.

Pero si necesita obtener un enlace para una sola categoría, puede usar

$id = get_cat_ID($title);
$link = get_category_link($id);

Bueno, dado que la razón para desaprobar esta función es estúpida [corporate non-sense ala Automattic https://core.trac.wordpress.org/ticket/57041 ]

¡Simplemente puedes quitarlo de obsoleto! Utilice esta función en su lugar:

function getPageByTitle( $page_title, $output = OBJECT, $post_type="page" ){

    global $wpdb;

    if ( is_array( $post_type ) ) {
        $post_type           = esc_sql( $post_type );
        $post_type_in_string = "'" . implode( "','", $post_type ) . "'";
        $sql                 = $wpdb->prepare(
            "
            SELECT ID
            FROM $wpdb->posts
            WHERE post_title = %s
            AND post_type IN ($post_type_in_string)
        ",
            $page_title
        );
    } else {
        $sql = $wpdb->prepare(
            "
            SELECT ID
            FROM $wpdb->posts
            WHERE post_title = %s
            AND post_type = %s
        ",
            $page_title,
            $post_type
        );
    }

    $page = $wpdb->get_var( $sql );

    if ( $page ) {
        return get_post( $page, $output );
    }

    return null;
}

Así es como lo hago con WP_Query

function new_get_page_by_title( $page_title, $output = OBJECT, $post_type="page" ) {
$args  = array(
    'title'                  => $page_title,
    'post_type'              => $post_type,
    'post_status'            => get_post_stati(),
    'posts_per_page'         => 1,
    'update_post_term_cache' => false,
    'update_post_meta_cache' => false,
    'no_found_rows'          => true,
    'orderby'                => 'post_date ID',
    'order'                  => 'ASC',
);
$query = new WP_Query( $args );
$pages = $query->posts;

if ( empty( $pages ) ) {
    return null;
}

return get_post( $pages[0], $output );

}

  • Está bien, la pregunta era evitar WP_Query)) Pero agradezco tu esfuerzo. ¡Gracias por tu solución!

    – DimitFromCave

    13 de junio a las 8:47

Avatar de usuario de Rahul Srivastava
raul srivastava

Puedes probar esto:

get_permalink( get_page_by_title('Monthly Events');

Para obtener más detalles, visite el referencia.

¿Ha sido útil esta solución?