초기화 필터 또는 조치에서 $ post를 얻습니까? 일부 데이터를 가져와야하는 “초기”후크가 있습니다. 지금까지 유일한 해결

$ 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 );
}