Cómo obtener el ID de un post con la función Add Filter en WordPress

5 may 2012, 09:26:14
Vistas: 14.2K
Votos: 4

Estoy desarrollando un plugin y necesito añadir datos al final de un post basado en meta información personalizada.

Hasta ahora he hecho esto:

add_filter('the_content', 'AppendMeta');

Y aquí está la función "AppendMeta"

AppendMeta($content) {
    echo $content; // Mostrar el contenido del post
    $PersonName = get_post_meta($post->ID, 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}

Este código funciona si reemplazo $post->ID con el ID del post, pero necesito que funcione basado en el post que el usuario está viendo. ¿Cómo puedo pasar el ID del post como parámetro? $post->ID no funciona en este escenario y no entiendo por qué.

3
Comentarios

Nota rápida: al enganchar un filtro, tu función debe devolver la variable filtrada en lugar de imprimirla.

Bainternet Bainternet
5 may 2012 13:24:17

¿Es una convención o hay alguna razón para ello?

Talon Talon
5 may 2012 19:52:09

Es una convención por una razón, los filtros permiten alterar/modificar un valor y esperan que ese valor sea devuelto, así es como funcionan.

Bainternet Bainternet
6 may 2012 12:54:07
Todas las respuestas a la pregunta 2
2
10

No importa, descubrí que puedo usar get_the_ID();.

Esta función devolverá el ID de la publicación dentro del filtro the_content. La función simplemente declara el objeto global $post y devuelve su ID.

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    echo $content; // Mostrar el contenido de la publicación
    $PersonName = get_post_meta(get_the_ID(), 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}

Si no deseas usar get_the_ID(), simplemente necesitas declarar el objeto $post como global antes de usarlo:

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    global $post;
    echo $content; // Mostrar el contenido de la publicación
    $PersonName = get_post_meta($post->ID), 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}
5 may 2012 09:28:11
Comentarios

Ah, sí, es bueno saberlo, probablemente sea más confiable de esa manera.

Talon Talon
5 may 2012 19:51:18

get_the_ID() todavía está diseñado para usarse solo dentro del ciclo. Puede que te funcione bien en páginas individuales, pero una forma completamente confiable es acceder a la variable global $post como mencioné en mi respuesta.

Ashfame Ashfame
6 may 2012 09:48:08
1

the_ID() solo debe usarse dentro del loop, de lo contrario no puedes confiar en su resultado. Es mejor usar el objeto $GLOBALS['post'] dentro de tu llamada a la función.

5 may 2012 09:59:02
Comentarios

the_ID() también depende del global $post.

DrLightman DrLightman
25 feb 2020 13:19:10