Change Post Class function

时间:2016-03-23 作者:Sandra Johansson

我希望更改/删除wordpress中内置的自动post类函数的一部分,比如说,当我发表文章时,生成的html代码如下所示:

<div id="post-106" class="contentmain fullwidth post-106 post type-post status-publish format-standard has-post-thumbnail hentry category-test category-test2 category-test3 category-test4 tag-testingtags1 tag-testingtags2 tag-testingtags3"> 
我想删除自动生成代码中的标签(tag-testingtags1,2,3),我找不到wordpress中的哪个函数生成代码,有人愿意为我指出正确的方向吗?如果它是一个核心文件,是否有一种简单的方法可以使用某种过滤器钩子函数将标签排除在代码中。php所以我不必修改wp核心文件?

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

post_class() 是一个包裹get_post_class().

尝试以下挂钩post_class 这是从get_post_class() 在内部wp-includes/post-template.php:

add_filter(\'post_class\', \'filter_post_class\', 10, 3);

function filter_post_class($classes, $class, $post_id) {

    $temp = implode(\' \', $classes); 
    $temp = preg_replace(\'/\\s\\btag\\-\\w*\\b/i\', \'\', $temp);

    return explode(\' \', $temp);

}
或者(RECOMMENED):

add_filter(\'post_class\', \'filter_post_class\', 10, 3);

function filter_post_class($classes, $class, $post_id) {

    $classes = array_filter($classes, function($class_name){
       // use !== 0 to ensure we match tag- at begining of string
       return strpos($class_name, \'tag-\') !== 0;
    });

    return $classes;

}
另一种可能存在风险的替代方法是:

add_filter(\'get_the_tags\', \'filter_get_the_tags\');

function filter_get_the_tags() {

    return array();

}
虽然使用这种方法时,应该在回调中考虑一些条件逻辑。

我之所以这样说是因为只有其他函数(就核心WP而言)调用get_the_tags()wp-includes/feed.php 特别是get_the_category_rss().

SO网友:cybmeta

您可以使用post_class filter 要修改post类的输出,请执行以下操作:

add_filter( \'post_class\', \'cyb_post_class\' );
function cyb_post_class( $classes ) {

    // Modify the array $classes as you wish
    // For example: remove tag-testingtags1 class
    unset( $classes[\'tag-testingtags1\'] );

    return $classes;
}
名称以开头的类tag- 从与post关联的标记生成(核心的post标记分类法)。如果要自动删除这些类:

add_filter( \'post_class\', \'cyb_post_class\', 10, 3 );
function cyb_post_class( $classes, $class, $post_id ) {

    // Get all the tags associated with the post
    $tags = get_the_tags( $post_id );
    if( ! is_wp_error( $tags ) ) {
        foreach( $tags as $tag ) {
            if( isset( $classes[\'tag-\' . $tag->slug] ) ) {
                 unset( $classes[\'tag-\' . $tag->slug] );
            }
        }
    }

    return $classes;
}