get $ post no filtro init ou ação?

8

Parece que $ post está disponível apenas para ganchos em execução em determinados momentos. Eu tenho um gancho "init" que precisa extrair alguns dados do banco de dados usando o ID $ post- & gt ;.

Até agora, minha única solução foi adicionar outro filtro no the_content, que usa $ post para obter as informações de que preciso. Infelizmente, também ecoa o valor de retorno para a tela, e falha em realmente retorná-lo à função que originalmente chamava o filtro.

Aqui está o código que extrai os dados de que preciso, mas ecoa e não retorna o valor:

add_filter('the_content', 'get_keyword');
function get_keyword()
{
    global $post;
    $keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
    return $keyword;
}

Alguém tem alguma sugestão sobre como obter o que eu preciso e tê-lo de volta para a função de chamada para uso posterior no plugin?

EDIT: Para tornar isso mais claro, tenho um filtro em execução no init, que precisa recuperar informações na postagem atual do banco de dados. Para fazer isso, é necessário acesso ao ID $ post- > Mas isso não é possível dentro do init, então como posso obter o resultado que preciso?

Obrigado,

Jonathan

RESOLVIDO:

Acontece que a resposta foi simplesmente usar url_to_postid assim:

$keyword = get_post_meta(
     url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
     '_wpg_def_keyword',
     true
);

Funciona perfeitamente até mesmo no init.

    
por Jonathan 13.07.2011 / 09:45

3 respostas

10

RESOLVIDO: Acontece que a resposta foi simplesmente usar url_to_postid assim:

$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );

Funciona perfeitamente mesmo a partir do init.

    
por Jonathan van Clute 10.10.2011 / 05:12
1

Isso também funciona no WordPress 4.7:

$postID = url_to_postid( $_SERVER['REQUEST_URI'] , '_wpg_def_keyword', true ); 
    
por rogie 21.02.2017 / 06:04
0

Tive problemas ao usar a resposta aceita, pois não funciona com portas e portas multisite . Aqui está uma solução que deve funcionar em todos os casos:

/**
* Note: This function will only work on SINGULAR posts/pages/post types
*/
function get_early_postid() {
    return url_to_postid((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
}

// demo
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 );
}
    
por Blackbam 03.07.2018 / 17:27

Tags