从标记名称中删除字符

时间:2013-07-31 作者:Danny

我在尝试从标签中去掉特殊字符和空格时遇到了一些困难。使用以下代码:

                <ul class="work_tags_nav">
                <li><a class="all" href="#">all.</a></li>
            <?php
                query_posts(array( \'post_type\'=> \'work\' ));
                if ( have_posts() ) : while ( have_posts() ) : the_post();
                    $custom_post_tags = get_the_tags();
                if ( $custom_post_tags ) {
                    foreach( $custom_post_tags as $tag ) {
                        $tags_arr[] = $tag -> name;
                    }
                }
                endwhile; endif;
                if( $tags_arr ) {
                    $uniq_tags_arr = array_unique( $tags_arr );
                 foreach( $uniq_tags_arr as $tag ) {
                     // LIST ALL THE TAGS FOR DESIRED POST TYPE
                     $sanitizeTag =  sanitize_title($tag);
                     $tag_link = get_term_by(\'name\', $tag, \'post_tag\');                                              
                     echo \'<li><a class="\'.$tag.\'" href="javascript:void(0)">\' .$tag. \'.</a></li>\';
                     }
                 }
             ?>
            </ul>
在这一行:echo \'<li><a class="\'.$tag.\'" href="javascript:void(0)">\' .$tag. \'.</a></li>\';

我希望class=“”显示标记,但如果标记有“&;”或空间等,将其剥离。有什么想法吗?

3 个回复
最合适的回答,由SO网友:M-R 整理而成

这是你能做到的。

$tag = \'medical &amp; health\';
$tag_class = preg_replace(\'/[^A-Za-z0-9-]+/\', \'-\', html_entity_decode($tag));
echo \'<li><a class="\'.$tag_class.\'" href="javascript:void(0)">\' .$tag. \'.</a></li>\';

SO网友:iEmanuele

您还可以使用内置功能:sanitize_title();. 有关更多信息,请参阅here.

<?php 
//returns medical-health
echo sanitize_title( \'Medical & Health\' );
?>

SO网友:kaiser

使用native PHP functions:

$tag_name = filter_var( $tag_name, FILTER_SANITIZE_SPECIAL_CHARS );
获取post_tag 链接使用get_tag_link(), 如果是用于不同的分类法,请使用get_term_link() 相反

您也可以使用get_the_tag_list()get_the_term_list() 建立分类分类单元列表(术语、分类、后标记)。

由于只有一个过滤器,因此看起来与以下内容非常接近:

apply_filters(\'wp_get_object_terms\', $terms, $object_ids, $taxonomies, $args);
回调看起来是这样的:

add_filter( \'wp_get_object_terms\', \'wpse108491_term_links\' );
function wpse108491_term_links( $terms, $object_ids, $taxonomies, $args )
{
    if ( is_admin() )
        return $links;

    remove_filter( current_filter(), __FUNCTION__ );

    foreach ( $terms as $k => $t )
        $terms[ $k ]->name = filter_var( $t->name, FILTER_SANITIZE_SPECIAL_CHARS  );

    return $links
}
然后简单地这样称呼它:

echo get_the_term_list(
    get_the_ID(),
    \'post_tag\',
    \'<ul><li>\',
    \'</li><li>\',
    \'</li></ul>\',
);
请记住,上面的回调没有经过测试。

结束

相关推荐

在editags.php中使用多个id过滤分类术语

我想使用编辑标签。具有多个术语id的php搜索函数。例如,如果我在搜索框中键入以下内容:#1245&;6832,它应该在结果表(WP\\U terms\\U List\\U table)中显示这两个术语。我尝试使用pre\\u get\\u posts操作访问正在运行的搜索查询,但这只是显示一个“空”查询:add_action(\'pre_get_posts\', \'filter_terms_by_ids\' ); function filter_terms_by_ids( $w