有几种不同的方法可以实现这一点:自定义模板、元框或短代码。在所有情况下,您可能会使用get_posts()
或WP_Query
获取帖子和设置类别的方法。下面的示例代码用一个短代码说明了这一点。
基本用法
您只需在页面或博客上的帖子编辑器中编写短代码:
[posttable catname="Uncategorized"]
代码在插件中注册短代码,然后创建一个函数来返回输出。请注意,短代码总是只返回字符串,它不使用echo
或print
.
<?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年的结果如下:
参数id
和class
应提供足够的灵活性来调整样式。:)