$ post는 특정 시간에 실행되는 후크에만 사용할 수있는 것 같습니다. $ post-> ID를 사용하여 데이터베이스에서 일부 데이터를 가져와야하는 “초기”후크가 있습니다.
지금까지 유일한 해결 방법은 the_content에 다른 필터를 추가하는 것입니다.이 필터는 $ post를 사용하여 필요한 정보를 얻습니다. 불행히도 반환 값을 화면에 표시하고 필터를 원래 호출 한 함수로 실제로 반환하지 않습니다.
필요한 데이터를 추출하지만 값을 반향하여 반환하지 않는 코드는 다음과 같습니다.
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
누구든지 내가 필요한 것을 얻는 방법에 대한 제안이 있고 나중에 플러그인에서 사용할 수 있도록 호출 함수로 다시 전달합니까?
편집 : 이것을 더 명확하게하기 위해 init에서 실행중인 필터가 있는데, DB에서 현재 게시물에 대한 정보를 검색 할 수 있어야합니다. 이렇게하려면 $ post-> ID에 액세스해야합니다. 그러나 init 내에서는 불가능하므로 필요한 결과를 어떻게 얻을 수 있습니까?
감사,
홍옥
해결 :
대답은 단순히 다음과 같이 url_to_postid를 사용하는 것으로 나타났습니다.
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
init에서도 완벽하게 작동합니다.
답변
대답은 단순히 url_to_postid
다음과 같이 사용되었다는 것이 밝혀졌습니다 .
$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );
에서조차 완벽하게 작동합니다 init
.
답변
이것은 WordPress 4.7에서도 작동합니다.
$postID = url_to_postid( $_SERVER['REQUEST_URI'] , '_wpg_def_keyword', true );
답변
포트 및 다중 사이트 포트에서는 작동하지 않으므로 허용 된 답변을 사용하는 데 문제 가 있었습니다. 모든 경우에 작동해야하는 솔루션은 다음과 같습니다.
/**
* 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 );
}