Parece que $ post solo está disponible para ganchos que se ejecutan en ciertos momentos. Tengo un gancho "init" que necesita extraer algunos datos de la base de datos usando $ post-> ID.
Hasta ahora, mi única solución ha sido agregar otro filtro en the_content, que usa $ post para obtener la información que necesito. Desafortunadamente, también hace eco del valor de retorno en la pantalla y no puede devolverlo a la función que llamó originalmente al filtro.
Aquí está el código que extrae los datos que necesito, pero hace eco y no devuelve el valor:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
¿Alguien tiene alguna sugerencia sobre cómo obtener lo que necesito y hacer que vuelva a la función de llamada para su uso posterior en el complemento?
EDITAR: Para posiblemente aclarar esto, tengo un filtro ejecutándose en init, que necesita poder recuperar información de la publicación actual de la base de datos. Para hacer esto, requiere acceso a $ post-> ID. Pero eso no es posible dentro de init, entonces, ¿cómo puedo obtener el resultado que necesito?
Gracias,
Jonathan
RESUELTO
Resulta que la respuesta fue simplemente usar url_to_postid de esta manera:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Funciona perfectamente incluso desde init.
init
es demasiado pronto paraglobal $post;
estar dentro del alcance. tal vez si describe lo que está tratando de lograr le ayudará mejor.Respuestas:
Resulta que la respuesta fue simplemente usar
url_to_postid
así:Funciona perfectamente incluso desde
init
.fuente
Esto también funciona en WordPress 4.7:
fuente
Tuve problemas al usar la respuesta aceptada, ya que no funciona con puertos y puertos multisitio . Aquí hay una solución que debería funcionar en todos los casos:
fuente