web-dev-qa-db-fra.com

ajustez the_excerpt en fonction de la page de modèle

Comment puis-je écrire des conditions pour ajuster the_excerpt sur différentes pages?

Par exemple, sur ma page page-products.php, je veux que the_excerpt soit disons 40.

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

Est-ce une if et else conditions pour que cela se produise?

2
Darren Bachan

Vous pouvez l'ajouter directement au modèle avant l'en-tête dans la plupart des cas ...

<?php /* Template Name: Products */ ?>
<?php 
  add_filter( 'excerpt_length', function( $length ) {  return 10; }, 999);
  get_header(); 
?>

Celles-ci devraient également fonctionner si vous préférez mettre functions.php:

Méthode 2: Dans la boucle

$slug = get_page_template_slug($post->ID);
if('page-products.php' == $slug) {
        add_filter( 'excerpt_length', function( $length ) { 
           return 20; 
        }, 999);    
}

Méthode 3: en dehors de la boucle

if ( is_page_template( 'page-products.php' ) ) {
    add_filter( 'excerpt_length', function( $length ) { 
       return 20; 
    }, 999);
}

Ceci pourrait également être utilisé pour obtenir le modèle ....

global $post;
$template = get_post_meta($post->ID,'_wp_page_template',true);

Ou peut-être même ceci (non testé):

add_action('get_header', function() {
    if ( is_page( array( 37, 'Products' ) ) ) {
        add_filter( 'excerpt_length', function( $length ) { 
           return 20; 
        }, 999);
    }
}, 1);

Ou comme vu ici , vous pouvez créer votre propre fonction pour permettre à la longueur de l'extrait d'être déterminée en fonction de la nécessité par le nombre de caractères.

function excerpt($limit) {
  $excerpt = explode(' ', get_the_excerpt(), $limit);
  if (count($excerpt)>=$limit) {
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt).' ...';
  } else {
    $excerpt = implode(" ",$excerpt);
  } 
  $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
  return $excerpt;
}

Le pour afficher: _

<?php echo excerpt(50); ?>
1
Bryan Willis