web-dev-qa-db-ja.com

アーカイブウィジェットにカスタム投稿タイプを含める

私はArchivesウィジェット(TwentyTwelveテーマのストックウィジェット)に含めたい「ビデオ」というカスタム投稿タイプを持っています。アーカイブページには表示されますが、ウィジェットには表示されません。

私は既に持っています

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
function add_my_post_types_to_query( $query ) {
if ( $query->is_main_query() )
    $query->set( 'post_type', array( 'post', 'videos' ) );
return $query;
}

functions.php - IFステートメントを "if main query OR archive widget query"のように変更できますか?これどうやってするの?

2
Boris4ka

Archive ウィジェットはアーカイブを表示するためにwp_get_archives()を使用しています。

すべてのwp_get_archives()関数をターゲットにしたい場合は、getarchives_whereフィルタを使用してカスタム投稿タイプを追加できます。

add_filter( 'getarchives_where', 'custom_getarchives_where' );
function custom_getarchives_where( $where ){
    $where = str_replace( "post_type = 'post'", "post_type IN ( 'post', 'videos' )", $where );
    return $where;
}

最初の Archive ウィジェットのみをターゲットにしたい場合は、試すことができます。

add_action( 'widget_archives_args', 'custom_widget_archives_args' );
function custom_widget_archives_args( $args ){
    add_filter( 'getarchives_where', 'custom_getarchives_where' );
    return $args;
}

function custom_getarchives_where( $where ){
    remove_filter( 'getarchives_where', 'custom_getarchives_where' );
    $where = str_replace( "post_type = 'post'", "post_type in ( 'post', 'videos' )", $where );
    return $where;
}

他の部品への影響を防ぐために、フィルタが取り外されている場所。

4
birgire