Ottenere $post nel filtro o azione init?
Sembra che $post sia disponibile solo per gli hook eseguiti in determinati momenti. Ho un hook "init" che deve recuperare alcuni dati dal database utilizzando $post->ID.
Finora l'unica soluzione alternativa è stata aggiungere un altro filtro su the_content, che usa $post per ottenere le informazioni necessarie. Sfortunatamente, restituisce anche il valore a schermo e non lo restituisce alla funzione che ha chiamato il filtro.
Ecco il codice che estrae i dati necessari, ma li visualizza e non restituisce il valore:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Qualcuno ha suggerimenti su come ottenere ciò di cui ho bisogno e farlo passare alla funzione chiamante per un uso successivo nel plugin?
EDIT: Per chiarire meglio, ho un filtro in esecuzione su init che deve recuperare informazioni sul post corrente dal DB. Per farlo, ha bisogno di accedere a $post->ID. Ma questo non è possibile dentro init, quindi come posso ottenere il risultato?
Grazie,
Jonathan
RISOLTO:
La soluzione era semplicemente usare url_to_postid così:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Funziona perfettamente anche da init.

Si è scoperto che la risposta era semplicemente utilizzare url_to_postid
in questo modo:
$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );
Funziona perfettamente anche da init
.

Ho avuto problemi utilizzando la risposta accettata perché non funziona con le porte e le porte multisito. Ecco una soluzione che dovrebbe funzionare in ogni caso:
/**
* Nota: Questa funzione funzionerà solo su POST/PAGINE/TIPI DI POST SINGOLARI
*/
function get_early_postid() {
return url_to_postid((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
}
// esempio
add_action('init','my_super_early_meta_action');
function my_super_early_meta_action() {
$keyword = get_post_meta( get_early_postid(), '_wpg_def_keyword', true );
}
