web-dev-qa-db-fra.com

Comment afficher uniquement un extrait du contenu avec des types de publication personnalisés?

<?php
/*
Template Name: second
*/
?>


<?php get_header(); ?>


<?php query_posts(array('post_type'=>'event')); ?>
    <?php if(have_posts()) while(have_posts()) : the_post(); ?>
    <div id="post-<?php the_ID(); ?>" class="entry">
        <div class="thumbnail"><?php the_post_thumbnail('full'); ?></div>
        <h1 class="title"><?php the_title(); ?></h1>
        <div class="content page">
            <?php the_content(); ?>
            <?php wp_link_pages(array('before' => '<div class="page-link">'.__('Pages', 'cpotheme').':', 'after' => '</div>')); ?>
        </div>
    </div>
    <?php endwhile; ?>


<?php get_sidebar(); ?>
<?php get_footer(); ?>

La page agit comme un index.php Que dois-je modifier pour que le titre devienne le lien vers la page complète et que seul un extrait du contenu soit affiché?

2
user1735118

Vous n'avez besoin que de deux petits changements (1ère et 3ème lignes), bien que je me sois aussi permis de peaufiner les classes de la div pour ce qui semblait plus approprié:

<h1 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div class="excerpt event">
   <?php the_excerpt(); ?>
   <?php wp_link_pages(array('before' => '<div class="page-link">'.__('Pages', 'cpotheme').':', 'after' => '</div>')); ?>
</div>
0
mrwweb

Vous aurez besoin de former une balise d'ancrage html à l'aide de fonctions Wordpress, voici l'exemple.

Exemple -

<h1 class="title">
    <a href="<?php the_permalink(); ?>" title="<?php printf( 'Permalink to %s', the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
</h1>

Et pour n'afficher qu'un extrait, il y a des fonctions appelées the_excerpt()

0
amit

Tout d'abord: Question intéressante!

Deuxièmement: vous devez ajouter la balise <!--nextpage--> dans votre message une ou plusieurs fois. Sinon ça ne marchera pas.

Le plugin:

Ce plugin intercepte la sortie de get_permalink(), appelée en interne par wp_link_pages(). Dans get_permalink(), nous avons obtenu la fonction get_post_permalink() qui renvoie les types de publication personnalisés. Là nous trouvons le filtre 'post_type_link'- et c’est là que nous nous connectons.

Ensuite, prenons le global $pages, qui contient un tableau du contenu de l’article divisé par le commentaire HTML <!--nextpage-->. Notre variable statique est un compteur qui nous aide à déterminer la partie à renvoyer, en fonction de l'heure à laquelle la fonction a été appelée (à partir de 0).

La dernière chose à faire est d’ajouter cette partie de $pages à notre lien de publication. Comme la fonction esc_url() intercepte notre permalien et gâcherait toutes nos lettres majuscules, espaces, etc., nous y attachons également un filtre de déclenchement et ne renvoyons que la chaîne d'origine.

<?php 
/** Plugin Name: (#67750) »kaiser« Append excerpt to post pagination */

/**
 * Callback for get_post_permalink() that is called by get_permalink() for
 * custom post types. We append the $GLOBALS['pages'][ $current ] excerpt here.
 * @param  string $post_link The original posts page link
 * @param  object $post The post object
 * @param  mixed boolean/string $leavename
 * @param  mixed boolean/string $sample A sample link
 * @return string $post_link
 */
function wpse67750_pagination_excerpt( $post_link, $post, $leavename, $sample )
{
    if (
        'YOUR_POST_TYPE' !== get_post_type()
        OR ! in_the_loop()
        OR ! is_singular()
    )
        return;

    static $n = 0;
    // The global pages array: Contains the current post type pages
    global $pages;

    // We need a callback to reserve the original appended string
    // not messed up by the esc_url() function.
    add_filter( 'clean_url', 'wpse67750_pagination_url_cb', 10, 3 );

    // The current page content
    $curr = $pages[ $n++ ];

    // Build the output
    // Wrap it up for easy targeting via CSS and JS
    // Also append a non visible single HTML tag to allow closing the still open anchor
    $output = sprintf(
         '"> %s <span class="excerpt" id="page-%s">%s</span><a style="display:none" rel="nofollow" href="#'
        ,$n
        ,$n
        ,trim( $curr )
    );
    /*$output = apply_filters(
         'the_excerpt'
        ,$output
    );*/

    // Append to the link
    return $post_link.$output;
}
add_filter( 'post_type_link', 'wpse67750_pagination_excerpt', 10, 4 );

/**
 * The callback to preserve the string appended to the permalink
 * @param  string $url Escaped
 * @param  string $orig_url Not escaped
 * @param  string $context 'display'
 */
function wpse67750_pagination_url_cb( $url, $orig_url, $context )
{
    // Only run once
    remove_filter( current_filter(), __FUNCTION__ );

    // Return the non escaped original
    return $orig_url;
}

La solution n'est pas complètement parfaite. Je ne m'étais pas débarrassé du premier numéro et il semble y avoir un léger problème pour récupérer le dernier lien dans certains cas. Il y avait aussi le problème, ce noyau n'offrait pas la possibilité de se débarrasser de la balise de fermeture </a> ajoutée, donc je devais y ajouter fake . Ceux-ci ne sont pas affichés, ne seront pas suivis par les moteurs de recherche et ne font pas de mal. Ils ne sont tout simplement pas beaux, mais c'est la seule possibilité.

0
kaiser