如何使用自定义帖子类型仅显示内容的摘录?

时间:2012-10-10 作者:user1735118

<?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(); ?>
页面的作用类似于索引。php为了使标题成为指向整个页面的链接,并且只显示内容的摘录,我应该修改什么?

3 个回复
最合适的回答,由SO网友:mrwweb 整理而成

您只需要做两个小的更改(第1行和第3行),尽管我还随意调整了div上的类,使其看起来更合适:

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

SO网友:amit

您需要使用Wordpress函数形成一个html锚定标记,下面是一个示例。

Example -

<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>
要仅显示摘录,需要调用以下函数the_excerpt()

SO网友:kaiser

首先:Interesting Question!

第二:您需要添加<!--nextpage--> 在帖子中标记一次或多次。否则就不行了。

插件:

该插件的作用是拦截get_permalink(), 内部调用wp_link_pages(). 在…内get_permalink(), 我们得到了get_post_permalink() 为自定义帖子类型返回的函数。在那里我们找到了\'post_type_link\'-过滤,这就是我们的切入点。

然后我们采取global $pages, 其中包含由<!--nextpage--> HTML注释。静态变量是一个计数器,它帮助我们根据调用函数的时间(从0).

最后一件事是我们从$pages 到我们的帖子链接。作为esc_url() 函数截取我们的permalink,并会弄乱所有大写字母、空格等,我们在那里也附加了一个触发过滤器,只返回原始字符串。

<?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;
}
解决方案并不完全完美。我还没有摆脱第一个数字,在某些情况下,检索最后一个链接似乎有点问题。它也有一个问题,那就是核心不提供摆脱附加</a> 结束标记,所以我不得不在那里添加假链接。这些不会显示,不会被搜索引擎跟踪,也不会造成伤害。它们并不漂亮,但这是唯一的可能。

结束

相关推荐

我是否应该转义WordPress函数,如_title、_Excerpt、_Content

我看过代码,但在函数上看不到任何转义,例如the_title the_content the_excerpt等等。我可能读得不对。我是否需要在主题开发中避开这些功能,例如:esc_html ( the_title () )编辑:正如下面的答案所指出的,无论怎样,上述代码都是错误的-代码应该已经阅读esc_html ( get_the_title () )