Hướng dẫn wordpress check if content is empty - kiểm tra wordpress xem nội dung trống

Hướng dẫn wordpress check if content is empty - kiểm tra wordpress xem nội dung trống

Ngôi sao

Nhúng

Bạn thích làm gì?

WordPress: Kiểm tra xem The_Content có trống không / chỉ làm điều gì đó khi_content trống

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

Vấn đề: Bạn muốn kiểm tra xem nội dung trong bài viết WordPress có trống không. Có vẻ dễ dàng, nhưng thực hiện tìm kiếm trên Google về chủ đề này và bạn sẽ thấy câu hỏi được hỏi và - không chính xác - đã trả lời nhiều lần. You want to check if the content in a WordPress post is empty. Seems easy, but do a Google search on the topic and you’ll see the question asked and — incorrectly — answered several times.

Thực tế là, tôi biết làm thế nào để làm điều này. Tôi chỉ hy vọng có một chức năng tích hợp trong WordPress mà tôi không biết. Rõ ràng là không, vì vậy tôi đã viết của riêng tôi.

Tại sao không phải là dễ dàng và rõ ràng làm thế nào để kiểm tra nội dung trống? Vâng, bạn có thể làm điều này:

if ($post->post_content == '') { ... }

Điều đó sẽ hoạt động. Nếu nội dung thực sự trống. Điều đó có nghĩa là một chuỗi có độ dài bằng không. Như trong strlen($post->post_content) == 0. Mà nó có thể là. Nhưng có lẽ là không.

Nếu bạn đã làm việc với nội dung trang web thế giới thực, hoặc thậm chí những người khác từ trước đây, bạn sẽ biết rằng không gian trống là vô hình và rất nhiều lần có rất nhiều không gian trống trong một tài liệu không thực sự trống rỗng. Không gian, phá vỡ dòng, các đoạn HTML không có gì ngoài một không gian không phá vỡ trong đó. Tất cả chiếm không gian và làm cho nội dung trông trống rỗng, ngay cả khi nó không.

Ví dụ cuối cùng đó là một trong những quan trọng ở đây. Một bài đăng WordPress có thể trông giống như nó không có nội dung, nhưng nếu ai đó nhấn ENTER trong khi con trỏ nằm trong hộp nội dung và sau đó lưu trang, rất có thể nó có ít nhất một <p>&nbsp;</p> trong đó.

Vì vậy, những gì bạn cần là một chức năng tính đến tất cả những điều vô hình đó vào tài khoản. Vì nó không giống như WordPress có một chức năng như vậy, tôi đã viết của riêng mình, điều mà tôi đã làm nhỏ gọn nhất có thể:

function dlaps_content ($ str) {& nbsp; & nbsp; & nbsp; & nbsp; return trang trí (str_replace ('& nbsp;', '', stret_tags ($ str))) == ''; }
    return trim(str_replace(' ','',strip_tags($str))) == '';
}

Hàm này lấy chuỗi bạn truyền vào nó, loại bỏ tất cả các thẻ HTML, sau đó loại bỏ bất kỳ thực thể không gian không phá vỡ nào, sau đó cắt tất cả khoảng trắng. Nếu không có gì ngoài những thứ đó, thì nó sẽ trở thành một chuỗi trống. Nếu có bất kỳ nội dung nào của người Viking, thì chuỗi này sẽ bị trống rỗng. Sau đó, nó chỉ so sánh bất cứ điều gì nó còn lại với một chuỗi trống thực tế và trả về kết quả boolean.

Vì vậy, bây giờ nếu bạn muốn kiểm tra xem nội dung WordPress có thực sự trống không, bạn có thể làm điều này:

if (empty_content($post->post_content)) { ... }

Điều này sẽ trả về true nếu nội dung trống; false Nếu nó không.

CẬP NHẬT (8/31/2017): Bài đăng này tiếp tục là một trong những bài đăng được xem thường xuyên nhất trên blog của tôi và tôi đã có ý nghĩa từ lâu để sửa đổi nó với ghi chú quan trọng này. Như đã viết ở đây, bạn sẽ nhận được một sai lầm true được trả về nếu nội dung duy nhất là trong HTML, ví dụ, một hình ảnh. Nếu bạn muốn chức năng trả về false nếu không có nội dung văn bản, thì hãy để nó như hiện tại. Nhưng bạn có thể thêm tham số đầu vào thứ hai vào hàm

// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}
1 để bảo nó chỉ để lại một số thẻ HTML. Ví dụ, nếu bạn muốn cho phép thẻ hình ảnh, mã được sửa đổi sẽ đọc như vậy: This post continues to be one of the most frequently viewed on my blog, and I’ve been meaning for ages to amend it with this important note. As written here, you’ll get an erroneous true returned if the only content is in HTML, for instance, an image. If you want the function to return false if there’s no text content, then leave it as-is. But you can add a second input parameter to the
// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}
1 function to tell it to leave certain HTML tags alone. If you want to allow image tags, for instance, the modified code would read as such:

function dlaps_content ($ str) {& nbsp; & nbsp; & nbsp; & nbsp; return trang trí (str_replace ('& nbsp;', '', stret_tags ($ str, ''))) == ''; }
    return trim(str_replace(' ','',strip_tags($str,''))) == '';
}

Tôi đã thực hiện một số phương thức "has_content ()" trong nhiều lần trong nhiều năm nay và luôn có đủ thời gian ở giữa vì vậy tôi cần tìm kiếm lại một chút để trả lời câu hỏi này.

Dù sao - đây là giải pháp của tôi, mà tôi muốn tìm lần sau đây ở đây - vì vậy nó để tham khảo.

Tất cả các chức năng "Vòng lặp bên trong" có thể được thay thế bằng một đối tượng bài "Post_Content"

Trong Function.php và các tệp tương tự:

// write inside the loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
  echo $the_content;
}
// with post object by id
$post = get_post(12); // specific post
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
  echo $the_content;
}

là chức năng

// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}

Mẫu bên trong vòng lặp:

<?php if ( $customQuery->have_posts() ) {?>
  <?php while ( $customQuery->have_posts() ) {
    $customQuery->the_post(); ?>
    <?php $the_content = apply_filters('the_content', get_the_content()); ?>
    <!-- html -->
    <?php if ( !empty($the_content) ) { ?>
      <div class="content">
        <?php echo $the_content; ?>
      </div>
    <?php } ?>
  <?php } ?>
  <?php wp_reset_postdata(); ?>
<?php } ?>