如何处理WordPress模板标签的输出

时间:2015-11-11 作者:samix73

the_category() 例如:

以下是wordpress循环中的\\u category函数的输出:

    <ul class="post-categories">
        <li>
          <a href="http://example.com/category/another-category/" rel="category tag">
            Another Category
          </a>
       </li>
        <li>
          <a href="http://example.com/category/uncategorized/" rel="category tag">
             Uncategorized
          </a>
        </li>
   </ul>
所以我们需要一种方法来添加属性,就像其他一些类、数据属性和。。。到列表中,以便输出如下内容:

<ul id="drop1" class="f-dropdown" data-dropdown-content aria-hidden="true" tabindex="-1">
            <li>
          <a href="http://example.com/category/another-category/" rel="category tag">
            Another Category
          </a>
       </li>
        <li>
          <a href="http://example.com/category/uncategorized/" rel="category tag">
             Uncategorized
          </a>
        </li>
</ul>

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

下面是我如何操作\\u category()模板标记的输出。

功能。php:

function add_post_category_list_attrs($the_list) {
$list_id = "post-categories-id";
$category_title = __("Categories");

$list_trigger = sprintf(\'<a href="#" data-dropdown="%s" aria-controls="%s" aria-expanded="false" class="cat-list-trigger">%s</a>\',
                        $list_id, $list_id, $category_title);

$the_list = substr_replace($the_list, $list_trigger, 0 ,0);

$the_list = str_replace(\'<ul class="post-categories">\',
                        sprintf(\'<ul class="f-dropdown" id="%s" data-dropdown-content aria-hidden="true" tabindex="-1">\',
                                $list_id),
                        $the_list);

return $the_list;
}

if( ! is_admin() ){
    add_filter(\'the_category\', \'add_post_category_list_attrs\');
}

SO网友:Will

对于许多WordPress模板标记,包括the_categories() 无法更改HTML输出。相反,您可以使用get_the_categories() 并循环查看结果以创建自己的HTML。

<ul id="whatever" data-attribute="you" class="want">
<?php
    $categories = get_the_category();
    if ( ! empty( $categories ) ) :
        foreach( $categories as $category ) :
?>
            <li><a href="<?php echo esc_url( get_category_link( $category->term_id ) ); ?>" alt="<?php echo esc_attr( sprintf( __( \'View all posts in %s\', \'textdomain\' ), $category->name ) ); ?>"><?php echo esc_html( $category->name ); ?></a></li>
<?php
        endforeach;
    endif;
?>
</ul>
上述版本使用一些标准的WP方法来清理正在打印的每个位的输出(esc\\U url、esc\\U html…)。在foreach (取决于您的permalink结构):

echo \'<li><a href="/\' . $category->taxonomy . \'/\' . $category->category_nicename. \'">\' . $category->cat_name . \'</a></li>\';