抓取WordPress类别并截断它

时间:2012-02-11 17:06:39

标签: php wordpress wordpress-plugin

我需要一些帮助,为WordPress的Classipress主题为XTremeCarousel插件调整一点PHP。如果标题大于或等于14个字符,则下面的代码会截断标题。我需要它为类别和用户名做同样的事情,所以它不会将它们包装到另一个像。如果它们中的任何一个被包裹,它会将“查看更多”按钮向下推到它们所包含的div下方。如果需要,我可以发布链接以查看问题。这是相关代码的一部分,您可以看到第二行是标题被抓取和截断的位置。我将尝试自己重写,但我愿意接受建议,因为我认为我没有必要的技能来做这件事... lol

最后,除了价格之外的每一行都需要被截断为14个字符,因此它们不会将信息包装起来。

<div style="margin-top:16px"></div>
        <a id="rb_title"><?php if ( mb_strlen(get_the_title()) >= 14 ) echo mb_substr( get_the_title(), 0, 14 ).'...'; else the_title(); ?></a>
        <p id="rb_xtrmcarousel">
            Under: <?php if ( get_the_category() ) the_category(', '); else echo get_the_term_list( $post->ID, APP_TAX_CAT, '', ', ', '' ); ?><br />
            By: <span class="owner"><?php the_author_posts_link(); ?></span><br />
            <span class="rb_price">Price: <?php if ( get_post_meta( $post->ID, 'price', true ) ) cp_get_price_legacy($post->ID); else cp_get_price( $post->ID, 'cp_price' ); ?></span>
        </p>

我认为这对作者的名字有用,虽然它没有抓住the_author_posts_link。

By: <span class="owner"><?php if ( mb_strlen(get_the_author_nickname()) >= 14 ) echo mb_substr( get_the_author_nickname(), 0, 14 ).'...'; ?><?php if ( mb_strlen(get_the_author_nickname()) <= 14 ) echo mb_substr( get_the_author_nickname(), 0, 14 ).''; ?></span><br />

每次我尝试重写类别行时,它都会空白,因为我不知道我在做什么... :)但是,我可以让它返回类别名称并且它已链接但它不是显然被截断了:

Under: <?php echo get_the_term_list( $post->ID, APP_TAX_CAT, '', ', ', '' ); ?>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的问题是get_the_term_list函数返回一个HTML字符串,因此您要计算HTML标记中的字符以及类别名称本身中的字符。

以下是一些应从HTML标记中提取类别名称的代码,仅截断名称(如有必要),并输出带有截断类别名称的HTML字符串:

Under: 
<?php
    $the_cat_html = get_the_term_list( $post->ID, APP_TAX_CAT);
    preg_match('/<a href="(.+)?">(.+)?</', $the_cat_html, $matches);
    $cat_href = $matches[1];
    $cat_name = $matches[2];
    echo "<a href='" . $cat_href . "'>";
    if ( mb_strlen($cat_name) > 14 )
        echo mb_substr( $cat_name, 0, 14 ) . '...'; 
    else
        echo $cat_name; 
    echo "</a>";
?>

此外,如果名称恰好包含14个字符,则看起来您的作者姓名代码将失败。试试这个:

By: <span class="owner">
<?php
    if ( mb_strlen(get_the_author_nickname()) > 14 )
        echo mb_substr( get_the_author_nickname(), 0, 14 ) . '...'; 
    else
        echo get_the_author_nickname(); 
?>
</span><br />