web-dev-qa-db-fra.com

Comment ajouter un type de message personnalisé au thème Contenu en vedette sur vingt-quatorze?

Cet article de wpmudev résume mon sentiment exactement environ vingt-quatorze:

Le contenu présenté ne prend pas en charge les types de publication personnalisés. Seules les publications sont sélectionnées, même si le type de publication personnalisé prend en charge la taxonomie des balises.

J'ai ajouté deux CPT qui partagent une taxonomie personnalisée. J'ai essayé de les étiqueter sans aucune chance, regardé inc/featured-content.php, js/slider.js et functions.php.

Comment puis-je ajouter ces types d'articles afin qu'ils s'affichent dans le curseur Contenu en vedette de la page d'accueil?

Assurance de la qualité liée à WPSE

2
Danger14

Le filtre twentyfourteen_get_featured_posts:

Il a fallu creuser pour comprendre comment le filtre twentyfourteen_get_featured_posts est utilisé dans le thème TwentyFourteen ;-)


Le contenu présenté est récupéré avec:

$featured_posts = twentyfourteen_get_featured_posts();

mais cette fonction n'est que cette seule ligne:

return apply_filters( 'twentyfourteen_get_featured_posts', array() );

alors où est la viande?


On le trouve dans la classe Featured_Content , commençant par cette ligne :

add_filter( $filter, array( __CLASS__, 'get_featured_posts' ) );

d'où provient $filter:

$filter = $theme_support[0]['featured_content_filter'];

où:

$theme_support = get_theme_support( 'featured-content' );

Dans functions.php on trouve:

// Add support for featured content.
add_theme_support( 'featured-content', array(
    'featured_content_filter' => 'twentyfourteen_get_featured_posts',
    'max_posts' => 6,
) );

alors nous voyons enfin que:

$filter === 'twentyfourteen_get_featured_posts';

Exemple:

Pour remplacer les publications de contenu par défaut , vous pouvez ensuite essayer ceci:

add_filter( 'twentyfourteen_get_featured_posts', function( $posts ){

    // Modify this to your needs:
    $posts = get_posts( array(
        'post_type'       => array( 'cpt1', 'cpt2' ),
        'posts_per_page'  => 6,
        'featured_tax'    => 'featured_term' 
    ) );

    return $posts;

}, PHP_INT_MAX );

La prochaine étape consisterait à le connecter au personnalisateur de thème et éventuellement à le mettre en cache.

J'espère que vous pourrez continuer le voyage d'ici ;-)

2
birgire