如何创建某个类别的帖子的列表索引

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

我有一个科技博客,我想做的是为某个类别的文章创建一个索引页。例如,我希望“WordPress BasiX”类别下的所有文章都安排在一页的索引中(最好是表格)。有没有办法在wordpress中做到这一点?请帮忙。我的wordpress版本是3.4.2

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

有几种不同的方法可以实现这一点:自定义模板、元框或短代码。在所有情况下,您可能会使用get_posts()WP_Query 获取帖子和设置类别的方法。下面的示例代码用一个短代码说明了这一点。

基本用法

您只需在页面或博客上的帖子编辑器中编写短代码:

[posttable catname="Uncategorized"]

enter image description here

代码在插件中注册短代码,然后创建一个函数来返回输出。请注意,短代码总是只返回字符串,它不使用echoprint.

<?php
/* Plugin Name: T5 Post Table Shortcode
 * Description: Create a table of post with: <code>[posttable catname="category-name"]</code>.
 */

add_shortcode( \'posttable\', \'t5_posttable_shortcode\' );

/**
 * Create a table with all post from a category.
 *
 * @param  array $attr
 * @return string
 */
function t5_posttable_shortcode( $attr )
{
    $defaults = array (
        \'catname\' => FALSE,
        /* table attributes */
        \'class\'   => FALSE,
        \'id\'      => FALSE,
        /* name of a registered script to enqueue in the footer if
         * results are found. */
        \'script\'  => FALSE,
        \'order\'   => \'DESC\',
        \'orderby\' => \'date\'
    );
    extract( shortcode_atts( $defaults, $attr ) );

    $get_posts_args = array (
        \'numberposts\' => -1,
        \'order\'       => strtoupper( $order ),
        \'orderby\'     => $orderby,
        \'post_type\'   => \'post\'
    );

    if ( $catname and $category = get_term_by( \'name\', $catname, \'category\' ) )
    {
        $get_posts_args[\'cat\'] = $category->term_id;
    }

    if ( ! $posts = get_posts( $get_posts_args ) )
    {
        return \'<!-- nothing found -->\';
    }

    $out = \'<table\';
    $class and $out .= " class=\'$class\'";
    $id    and $out .= " id=\'$id\'";
    $out .= \'><thead><tr><th scope="col">\' . __( \'Name\' )
        . \'</th><th scope="col">\' . __( \'Date\' )
        . \'</th><th scope="col">\' . __( \'Comments\' )
        . \'</th></tr></thead><tbody>\';

    $dateformat = get_option( \'date_format\' );

    foreach ( $posts as $post )
    {
        $out .= sprintf(
            \'<tr><td><a href="%1$s">%2$s</a></td><td>%3$s</td><td>%4$d</td></tr>\',
            get_permalink( $post->ID ),
            get_the_title( $post->ID ),
            get_the_time( $dateformat, $post->ID ),
            get_comments_number( $post->ID )
        );
    }

    $script and wp_enqueue_script( $script );

    return "$out</tbody></table>";
}
这很粗糙;我只是匆匆地画了个草图。你必须register the script name 如果您需要某种表格分拣机,请单独使用(jQuery tablesorter 很好)
要了解其他参数,请阅读文档WP_Query.

要使用摘录或缩略图,只需添加…

apply_filters( \'get_the_excerpt\', $post->post_excerpt )
…或…

get_the_post_thumbnail( $post->ID )
…在你需要的地方。

例如:

get_the_title( $post->ID ) 
    . get_the_post_thumbnail( $post->ID ) 
    . apply_filters( \'get_the_excerpt\', $post->post_excerpt )
2011年的结果如下:

enter image description here

参数idclass 应提供足够的灵活性来调整样式。:)

结束

相关推荐

Add_ShortCode()在函数内不起作用

我有一个自定义的帖子类型bhour, 带字段bh_shortcode. 保存这种类型的帖子时,我希望它根据帖子的值bh_shortcode.如果bh_shortcode 是“test”,当一个[测试]快捷码标记出现在一个普通的post类型上时,不会发生任何事情--[测试]文本不会被替换。如果我放置add_shortcode(\'test\',\'save_bhour_details\'); 在功能之外,将替换[测试]文本。如何使用add_shortcode 函数内部的另一个函数?function bhou