web-dev-qa-db-fra.com

Inclusion d'un type de publication personnalisé dans le widget Archives

J'ai un type de message personnalisé appelé "vidéos" que je souhaite inclure dans le widget Archives (widget de stock dans le thème TwentyTwelve). Il n'apparaît déjà sur la page des archives, mais pas dans le widget.

Je ai déjà

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

dans functions.php - puis-je modifier l'instruction IF pour qu'elle ressemble à "si la requête principale OR la requête du widget d'archivage"? Comment puis-je faire ceci?

2
Boris4ka

Le Archive widget utilise wp_get_archives() pour afficher l'archive.

Si vous souhaitez cibler toutes les fonctions wp_get_archives(), vous pouvez utiliser le filtre getarchives_where pour ajouter votre type de publication personnalisé:

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

Si vous voulez cibler uniquement le premier Archive widget, vous pouvez essayer

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

avec

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

où le filtre est retiré, pour éviter d’affecter d’autres pièces.

4
birgire