3 Câu hỏi: Làm cách nào để thêm một bản giới tính sau một giới hạn từ / ký tự cụ thể trong PHP?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang làm việc với mã php như dưới đây:

   <div class="case-breaking__content">
        <p><?php echo the_title(); ?></p>
   </div>

Mã php ở trên trả về nội dung sau:

absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns 

Điều tôi muốn là, sau một giới hạn từ cụ thể, nó sẽ hiển thị ... Hãy nói sau 8 từ, nó sẽ như thế này;

absv shss xcnx shss hshhs shhsw shshs hsnna...

Tôi đã thử theo cách sau nhưng dường như không hoạt động:

<div class="case-breaking__content">
<p><?php $out = strlen(the_title()) > 50 ? substr(the_title(),0,50)."..." : the_title(); ?></p>
</div>
    
2
  1. Theo cách nào thì nó "dường như không hoạt động"?
    2019-05-08 15: 53: 46Z
  2. @ ChrisWhite Nó không hiển thị ... và nó hiển thị toàn bộ danh sách các từ.
    2019-05-08 15: 55: 25Z
  3. &lt ;? php echo strlen (the_title ()) > 50? chất nền (the_title (), 0,50). "...": the_title (); ? >
    2019-05-08 16: 00: 58Z
  4. @ RakeshJakhar Tôi đã dán mã của bạn, điều đang xảy ra bây giờ là tôi đang xem nội dung hai lần. Thích cái này absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns
    2019-05-08 16: 03: 32Z
3 Câu trả lời                              3                         

the_title() lặp lại tiêu đề thay vì trả lại. Nếu bạn đang thực hiện các thao tác trên nó thì bạn muốn sử dụng get_the_title().

<div class="case-breaking__content">
<p><?php echo strlen(the_title()) > 50 ? substr(get_the_title(),0,50)."..." : get_the_title(); ?></p>
</div>

Điều đó có nghĩa là nếu bạn đang sử dụng WordPress, tùy chọn dễ nhất là sử dụng chức năng tích hợp wp_trim_words() https://codex.wordpress.org/Function_Reference/wp_trim_words

Vì vậy, trong trường hợp của bạn

<div class="case-breaking__content">
<p><?php echo wp_trim_words( get_the_title(), 8, '...') ?></p>
</div>
    
2
2019-05-08 16: 21: 57Z

Bạn có thể chỉ cần thực hiện một preg_split trên khoảng trắng, sau đó nối mảng trở lại tiêu đề chuỗi, với số lượng giới hạn, như bạn muốn:

$str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns
";

$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

var_dump($title);

Đầu ra

string(47) "absv shss xcnx shss hshhs shhsw shshs hsnna ..."

Bạn cũng có thể thêm câu lệnh if, trong trường hợp số lượng từ ít hơn giới hạn mong muốn của bạn, để chỉ cần phá vỡ vòng lặp, có thể tương tự như:

$str = "absv shss xcnx shss hshhs";
// $str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns";

$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
    if (sizeof($arr) < $limit - 1) {
        $title .= $str . " ...";
        break;
    }
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

var_dump($title);

Đầu ra

string(29) "absv shss xcnx shss hshhs ..."

Thực hiện

Nếu bạn muốn triển khai mã này, điều này có thể hoạt động:

$arr = preg_split('/(\s)/m', get_the_title());
$limit = 8; // number of words limit
$title = '';
foreach ($arr as $key => $value) {
    if (sizeof($arr) < $limit - 1) {
        $title .= get_the_title() . " ...";
        break;
    }
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

$out = '<div class="case-breaking__content">';
$out .= '<p>';
$out .= $title;
$out .= '</p>';
$out .= '</div>';

echo $out;
    
3
2019-05-08 16: 25: 02Z
  1. Cảm ơn câu trả lời. No trông tuyệt. Tôi tự hỏi làm thế nào tôi có thể tích hợp mã này với mã trong câu hỏi trên.
    2019-05-08 16: 19: 25Z
<div class="case-breaking__content">
    <?php $words = explode(" ", the_title()); ?>
    <p><?php echo count($words) <= 8 ? the_title() : implode(" ", array_slice($words, 0, 8)) . "..."; ?></p>
</div>

Giải pháp Vanilla PHP, không cần phức tạp hơn thế.

    
1
2019-05-08 16: 34: 31Z
nguồn đặt đây