Obtener el contenido de una página usando el slug

6 oct 2012, 23:08:47
Vistas: 52.4K
Votos: 14

Estoy tratando de obtener el contenido de una página cuando solo conozco la cadena del slug.

¿Existe una función para esto, o una manera fácil de hacerlo, o es un caso donde debo usar SQL?

Muchas gracias

0
Todas las respuestas a la pregunta 4
0
37

Usa get_posts() y el parámetro name que es el slug:

$page = get_posts([ 'name' => 'tu-slug' ]);

if ( $page )
{
    echo $page[0]->post_content;
}

Ten en cuenta que el tipo de post en get_posts() por defecto es 'post'. Si quieres una página usa…

$page = get_posts([
    'name'      => 'tu-slug',
    'post_type' => 'page'
]);

Si deseas todos los tipos de post públicos (excepto adjuntos) establece el argumento post type a 'any'. Entonces podrías obtener más de un resultado porque los slugs no son únicos entre diferentes tipos de post.

6 oct 2012 23:24:53
0

Si estás en la página con el slug en cuestión

Lee sobre etiquetas condicionales:
is_page() también acepta el slug como argumento.

Por lo tanto,

if( is_page( 'tu-slug' ) ) {
     // obtener contenido
}

hará lo que necesitas.

Si estás en otra página

Si te interesa saber cómo obtener el contenido de una entrada/página basado en un slug cuando no estás en dicha página, puedes pasarle un slug a get_posts. Esto no está documentado en el codex.

Lo siguiente obtendrá el ID a partir de un slug:

$args = array(
    'name' => 'tu-slug'
);
$posts_from_slug = get_posts( $args );

// mostrar el contenido obtenido
echo $posts_from_slug[0]->post_content;
6 oct 2012 23:17:47
0

Puedes obtener una página por su título usando la función get_page_by_title().

Puedes usarla así (asumiendo que quieres mostrar el contenido):

$page = get_page_by_title('Tu Título'); 
$content = apply_filters('the_content', $page->post_content);
echo $content;

Por cierto, para obtener una página usando el slug:

function get_page_id_by_slug($slug){
    global $wpdb;
    $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$slug."'AND post_type = 'page'");
    return $id;
}

$page = get_post(get_page_id_by_slug('mi-slug'));
6 oct 2012 23:30:04
0

Utiliza get_page_by_path para recuperar el objeto WP_Post, luego puedes extraer el contenido de la publicación y filtrarlo para la salida HTML si es necesario.

Sintaxis

get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = 'page' )

Ejemplo:

Uso este código cuando completo una plantilla de tema desde una página, para asegurar que el contenido se renderice como HTML:

<?php
$about = get_page_by_path('about');
$content = apply_filters( 'the_content', $about->post_content );
echo $content;
?>

Para obtener una publicación de un tipo diferente, pasa los otros dos parámetros:

get_page_by_path('gato', OBJECT, 'animal');

para más referencia consulta Referencia de Funciones de WordPress

Parámetros

21 oct 2015 09:09:17