web-dev-qa-db-ja.com

Functions.phpで現在の投稿IDを取得する

現在の投稿IDをfunctions.phpの配列に入れる必要があります。

function filter_query(  $query ) {
    $query['post__not_in'] = array(7);
    return $query;
}
add_filter('wpc_query', 'filter_query', 1 );

get_the_ID();またはglobal $post; $id = $post->ID;は何らかの理由で機能しませんでした。

1
CaraMar

私はこれがすべての場合にうまくいくはずだと思います - あなたがループにいるかどうかにかかわらず。 (ウィジェットでは、たぶんあなたはループの中で ではない である)

ループの外側では、これは単一のページまたは投稿では非常にうまく機能しますが、他の種類のページでは希望の投稿が表示されない場合があります。 (ホームページ、カテゴリページ、...)そのような場合、WordPressの ' is_singular function ...を使用して、単数ページでのみコードを実行するための条件を追加することをお勧めします。

とにかく、ここにあなたのコードの修正版があります:

function filter_query( $query ) {
    if(in_the_loop()) $post_id = get_the_ID();
    else $post_id = get_queried_object_id();
    if($post_id) {
        if(empty($query['post__not_in'])) $query['post__not_in'] = array(); // that way if someone else already has stuff in $query['post__not_in'], we won't override it but append to it...
        $query['post__not_in'][] = $post_id;
    }
    return $query;
}
add_filter('wpc_query', 'filter_query', 1 );

お役に立てれば!

2
MacPrawn