如何自动将类别及其描述放在可湿性粉剂页面上?

时间:2011-08-06 作者:Peter Beattie

我正在使用博客跟踪我可能想用于论文的引用。每个引用都是一篇文章,作者是类别,这些类别是子类别的父类别,这些子类别由作者以书籍或文章的标题命名。在书/文章子类别的描述中,我放了出版信息,例如“企鹅:伦敦,2007”。

让我们假设一个特定的作者类别被称为“Mill,John Stuart”(有四条引文),一本书的子类别是“On Liberty”(有两条引文),描述是“Bantam Classic:London,1993”。现在,我想添加一个页面,显示我收集的所有源代码,并自动输出如下HTML代码:

<p class="lit-author"><a href="../category/mill-john-stuart/">Mill, John Stuart</a> (4)</p>
<p class="lit-work"><a href="../category/mill-john-stuart/on-liberty/"><i>On Liberty<i></a>. Bantam Classic: London, 1993. (2)</p>
这也可以用<;ul>;s、 我真正感兴趣的是能够使用CSS格式化输出,并在页面上输入。(它几乎只是一个类别小部件的内容,但在一个页面上,加上类别描述。)

我将如何做到这一点,以及我必须将相关代码放在哪里,以便将其显示在特定页面上?

(WP 3.2.1,石墨烯1.4.1)

2 个回复
SO网友:chrisguitarguy

首先,您需要获取所有没有父级的类别(顶级类别)。我们将使用get_terms 为了这个。Get terms将返回一个空数组WP_Error 对象,或表示术语的对象数组。因此,在继续之前,我们需要确保我们的通话正常。

<?php
// very hackish get_terms call with the 0 as a string to return top level terms
$cats = get_terms( \'category\', array( \'parent\' => \'0\' ) );
if( ! $cats || is_wp_error( $cats ) ) return;
有了它,我们可以首先输出一个容器div,然后启动foreach 循环遍历所有类别。我们将根据您的要求在段落内输出术语和链接。

<?php
$out = \'<div id="ref-list">\' . "\\n";
foreach( $cats as $cat )
{
    $out .= sprintf( 
        \'<p class="lit-author"><a href="%s">%s</a></p>\',
        esc_url( get_term_link( $cat ) ),
        sanitize_term_field( \'name\', $cat->name, $cat->term_id, \'category\', \'display\' )
    );

    $out .= "\\n"; // add some newlines to prettify our source
仍然在我们的foreach( $cats as $cat ) 循环,我们可以为足月儿童循环。如果我们找到它们,我们将遍历每个子级,获取其链接、名称和描述。

     <?php
    $children = get_term_children( $cat->term_id, \'category\' );
    if( $children && ! is_wp_error( $children ) )
    {
        foreach( $children as $child )
        {
            $child = get_term( $child, \'category\' );
            if( is_wp_error( $child ) ) continue;
            $out .= sprintf( 
                \'<p class="lit-work"><a href="%s"><em>%s</em></a>. %s</p>\',
                esc_url( get_term_link( $child ) ),
                sanitize_term_field( \'name\', $child->name, $child->term_id, \'category\', \'display\' ),
                esc_attr( $child->description ) // sanitize_term_field adds autop, no good for this situation
            );
            $out .= "\\n"; // prettifying newline
        }
    }
} // end of the foreach( $cats as $cat ) loop
$out .= "</div>\\n";
return $out;
您可以将整个混乱封装在一个函数中(注意:这里添加了计数,上面忘记了计数)。

<?php
function wpse25157_ref_list()
{
    // very hackish get_terms call with the 0 as a string to return top level terms
    $cats = get_terms( \'category\', array( \'parent\' => \'0\' ) );
    if( ! $cats || is_wp_error( $cats ) ) return;
    $out = \'<div id="ref-list">\' . "\\n";
    foreach( $cats as $cat )
    {
        $out .= sprintf( 
            \'<p class="lit-author"><a href="%s">%s</a> (%s)</p>\',
            esc_url( get_term_link( $cat ) ),
            sanitize_term_field( \'name\', $cat->name, $cat->term_id, \'category\', \'display\' ),
            sanitize_term_field( \'count\', $cat->count, $cat->term_id, \'category\', \'display\' )
        );

        $out .= "\\n"; // add some newlines to prettify our source

        $children = get_term_children( $cat->term_id, \'category\' );
        if( $children && ! is_wp_error( $children ) )
        {
            foreach( $children as $child )
            {
                $child = get_term( $child, \'category\' );
                if( is_wp_error( $child ) ) continue;
                $out .= sprintf( 
                    \'<p class="lit-work"><a href="%s"><em>%s</em></a>. %s (%s)</p>\',
                    esc_url( get_term_link( $child ) ),
                    sanitize_term_field( \'name\', $child->name, $child->term_id, \'category\', \'display\' ),
                    esc_attr( $child->description ),
                    sanitize_term_field( \'count\', $child->count, $child->term_id, \'category\', \'display\' )
                );
                $out .= "\\n"; // prettifying newline
            }
        }
    } // end of the foreach( $cats as $cat ) loop
    $out .= "</div>\\n";
    return $out;
}
并添加一个短代码,以便在您喜欢的任何页面/帖子上显示所有内容。

<?php
add_action( \'init\', \'wpse25157_init\' );
function wpse25157_init()
{
    add_shortcode( \'ref-list\', \'wpse25157_ref_list\' );  
}
作为插件:https://gist.github.com/1196457

SO网友:Chris Carson

复制page.php 在你的主题根目录中命名page-list-of-categories.php. 将以下内容置于顶部:

<?php
/**
 * Template Name: Page Category Display
 */
?>
之后的某个地方<?php the_title()?> 放置以下内容。。。

<?php
$args = array(\'title_li\' => \'\');
?>
<ul id="myCategories"><?php wp_list_categories($args);?></ul>
然后制作一个页面,并从“页面属性”框中“模板”下的下拉列表中选择“页面类别显示”。

上面的css类不会被输出,但您可以设置它们的样式,因为您的lit-work 类别始终是作者类别的子类别。因此,您可以使用ul#myCategories li 并作为ul#myCategories li li.

还有其他选项--传入$args 阵列--用于wp_list_categories 你可以调查一下。

结束

相关推荐

为什么我看到任何用户都有Manage_Categories功能,但没有Manage_Tages功能?

使用“Members”或“Capability Manager”之类的插件,我看不到这样的插件manage_tags 能力。难道不应该有这样一个吗manage_categories?编辑:我想我知道了。manage\\u术语适用于所有分类法。没有一个专门用于标记,但如果我愿意,我可以创建一个。这可以让我设置一个只能编辑类别而不能编辑标记的角色,反之亦然。注:我的评分下降了。如果你对我的评价很低,请说明原因。谢谢