抓取WordPress类别并截断它



我需要一些帮助来调整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>

我认为这将适用于作者的名字,尽管它没有抓取_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, '', ', ', '' ); ?>

有什么想法吗?

您的问题是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 />

最新更新