Xác định xem truy vấn WordPress hiện tại có bài viết để lặp lại hay không. Bool true nếu các bài viết có sẵn, sai nếu kết thúc vòng lặp. True if posts are available, false if end of the loop. Hàm này kiểm tra xem có nhiều bài đăng có sẵn trong đối tượng WP_Query chính để lặp lại hay không. Nó gọi & NBSP; ________ 9 Phương thức trên đối tượng toàn cầu have_posts []: boolbool
0.public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
Nếu không có thêm bài viết trong vòng lặp, nó sẽ kích hoạt hành động
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
1 và sau đó gọi gọi ____ 12 & nbsp; phương thức.Tệp:
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
3. Xem tất cả các tài liệu tham khảofunction have_posts[] {
global $wp_query;
return $wp_query->have_posts[];
}
Xem trên Tracview trên GitHub View on GitHub
1.5.0 | Được giới thiệu. |
Xác định xem có nhiều bài viết có sẵn trong vòng lặp hay không. Gọi hành động ‘loop_end, khi vòng lặp hoàn tất. Bool true nếu các bài viết có sẵn, sai nếu kết thúc vòng lặp. True if posts are available, false if end of the loop. Tệp:
4. Xem tất cả các tài liệu tham khảopublic function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
Xem trên Tracview trên GitHub View on GitHub
Hỏa hoạn khi vòng lặp kết thúc.
Hỏa hoạn nếu không có kết quả được tìm thấy trong một truy vấn bài.
1.5.0 | Được giới thiệu. |
Các hàm WordPress có các hàm [] được sử dụng để kiểm tra truy vấn WordPress hiện tại có bất kỳ dữ liệu nào để lặp. Nó sẽ trả về đúng nếu dữ liệu có sẵn. Nếu không nó sẽ trả về sai. Lưu ý: Chúng tôi không cần gửi bất kỳ đối số nào cho chức năng này.
Định dạng 1:
Nó sẽ định dạng cơ bản trong trang WordPress Archieve, trang danh mục, v.v.
Định dạng 2:
Truy vấn tùy chỉnh để có hàm_post [] trong WordPress.
Định dạng 3:
Định dạng 4:
Trình tải mẫu WordPress sẽ bao gồm tệp mẫu theo ngữ cảnh thích hợp trong nhiều trường hợp, ngay cả khi truy vấn cho ngữ cảnh đó không trả lời. Ví dụ:
- Chỉ số bài viết trên blog chính
- Chỉ số lưu trữ danh mục [danh mục tồn tại, nhưng không có bài viết]
- Chỉ mục lưu trữ thẻ [thẻ tồn tại, nhưng không có bài đăng]
- Chỉ số lưu trữ của tác giả [tác giả tồn tại, nhưng không có bài viết]
- Chỉ số kết quả tìm kiếm
Do đó, trong các trường hợp này, tệp mẫu thích hợp sẽ được tải, nhưng không có bài đăng nào sẽ được xuất, vì truy vấn trả về không có bài đăng.
Các ví dụ bằng chứng của khái niệm:
- Danh mục tồn tại, nhưng không có bài viết [bao gồm mẫu danh mục]
- Danh mục không tồn tại [bao gồm mẫu 404]
Vì vậy, trong các bối cảnh này, nó rất hữu ích cho tệp mẫu để bao gồm điều kiện
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
5.Trong các bối cảnh khác, tệp mẫu sẽ không bao giờ được tải nếu truy vấn trả về không có bài đăng. Ví dụ:
- Bài đăng trên blog
- Trang tĩnh
Trong các bối cảnh này,
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
5 có lẽ là không cần thiết.Chỉnh sửa
Tôi hiểu truy vấn được gọi bởi_post [], phải không? Và nếu trong khi [have_posts []] tồn tại, truy vấn không bao giờ xảy ra nếu không có bài đăng.
Để hiểu những gì đang xảy ra, bạn phải xem xét thứ tự của các hành động WordPress. Bắt đầu với
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
7 [và bỏ qua một số cho rõ ràng]:
7public function have_posts[] { if [ $this->current_post + 1 < $this->post_count ] { return true; } elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] { /** * Fires once the loop has ended. * * @since 2.0.0 * * @param WP_Query $query The WP_Query instance [passed by reference]. */ do_action_ref_array[ 'loop_end', array[ &$this ] ]; // Do some cleaning up after the loop. $this->rewind_posts[]; } elseif [ 0 === $this->post_count ] { /** * Fires if no results are found in a post query. * * @since 4.9.0 * * @param WP_Query $query The WP_Query instance. */ do_action[ 'loop_no_results', $this ]; } $this->in_the_loop = false; return false; }
9public function have_posts[] { if [ $this->current_post + 1 < $this->post_count ] { return true; } elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] { /** * Fires once the loop has ended. * * @since 2.0.0 * * @param WP_Query $query The WP_Query instance [passed by reference]. */ do_action_ref_array[ 'loop_end', array[ &$this ] ]; // Do some cleaning up after the loop. $this->rewind_posts[]; } elseif [ 0 === $this->post_count ] { /** * Fires if no results are found in a post query. * * @since 4.9.0 * * @param WP_Query $query The WP_Query instance. */ do_action[ 'loop_no_results', $this ]; } $this->in_the_loop = false; return false; }
Vì vậy, những gì đang xảy ra, và theo thứ tự nào?
- Truy vấn được gọi:
- Mẫu được chọn:
- Mẫu được tải/đầu ra. Các hành động sau được bắn bởi mẫu:
Vì vậy,
7, bị bắn bởi
0, xảy ra rất lâu sau khi truy vấn được phân tích cú pháp, các bài viết được tìm nạp và mẫu được tải.
Tôi rất biết ơn rằng bạn cung cấp rất nhiều thông tin mà tôi không biết, nhưng đây không phải là điều tôi hỏi.
Ồ, nhưng tôi tin rằng đó chính xác là những gì bạn đã hỏi.
Câu hỏi thực sự là: Trả về truy vấn hợp lệ là gì? Đối với các bối cảnh như chỉ mục lưu trữ danh mục, truy vấn là hợp lệ và mẫu danh mục được tải, nếu ID danh mục truy vấn tồn tại, ngay cả khi không có bài đăng nào được gán cho danh mục đó.
Tại sao? Bởi vì truy vấn được phân tích cú pháp là [IIRC]
1 - đây là một truy vấn hợp lệ ngay cả khi không có bài đăng được gán cho danh mục đó và do đó không dẫn đến 404 khi phân tích cú pháp.
Trong trường hợp đó, bạn nhận được một truy vấn hợp lệ và một tệp mẫu được tải, nhưng không có bài đăng. Do đó,
public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
5, trong thực tế có liên quan. Một lần nữa, đây là một ví dụ: danh mục tồn tại, nhưng không có bài viết được chỉ định. Tệp mẫu danh mục được tải, với public function have_posts[] {
if [ $this->current_post + 1 < $this->post_count ] {
return true;
} elseif [ $this->current_post + 1 == $this->post_count && $this->post_count > 0 ] {
/**
* Fires once the loop has ended.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance [passed by reference].
*/
do_action_ref_array[ 'loop_end', array[ &$this ] ];
// Do some cleaning up after the loop.
$this->rewind_posts[];
} elseif [ 0 === $this->post_count ] {
/**
* Fires if no results are found in a post query.
*
* @since 4.9.0
*
* @param WP_Query $query The WP_Query instance.
*/
do_action[ 'loop_no_results', $this ];
}
$this->in_the_loop = false;
return false;
}
5 trả về 4.
Điều này sẽ không đúng với các truy vấn bao gồm một biến bài đăng [
5], chẳng hạn như các bài đăng trên blog và các trang tĩnh, bởi vì bài đăng sẽ không thực sự tồn tại và khi được phân tích cú pháp, truy vấn sẽ không trả về một đối tượng hợp lệ.
Chỉnh sửa 2
Nếu tôi hiểu đúng nếu không có nếu [have_posts []] trong một mẫu danh mục và danh mục không có bài đăng, thì nó sẽ trả về 404.php, mặc dù nó phải là return category-smample.php mà không có bài đăng. Có đúng không?
Không. Hãy nhớ: Mẫu được chọn tại
4. Vì vậy, nếu truy vấn nếu hợp lệ, thì tệp mẫu thích hợp được tải. Nếu truy vấn không hợp lệ, thì mẫu 404 được tải.
Vì vậy, một khi một mẫu được tải - ví dụ: Mẫu danh mục - một khi vòng lặp là đầu ra, mẫu không thay đổi.
Nhìn lại thứ tự hành động:
- ...
Chỉnh sửa cuối cùng
Và tôi tuyên bố rằng trong khi kiểm tra sự tồn tại của các bài đăng, tại sao tôi nên chạy cùng một bài kiểm tra hai lần. Đó là câu hỏi của tôi từ điểm đầu tiên tôi chỉ hỏi về điều đó.
Và với điều đó, cuối cùng tôi cũng hiểu: tất cả cùng, câu hỏi của bạn không liên quan gì đến WordPress hoặc vòng lặp WordPress. Bạn đang hỏi về việc gói bất kỳ vòng lặp PHP
2 tùy ý nào bên trong
3 có điều kiện kiểm tra cùng một điều kiện.
Câu hỏi đó nằm ngoài phạm vi của WPSE, nhưng tôi sẽ giải thích ngắn gọn:
Một điều kiện
3 là một đánh giá nhị phân: đó là
5 hoặc
4, và những gì xảy ra bên trong điều kiện đó được thực hiện một lần.
Một điều kiện
2 là một vòng lặp: nó vẫn đúng trong một số khoảng thời gian riêng biệt, dựa trên một số loại bộ đếm; và những gì xảy ra bên trong điều kiện đó được thực hiện nhiều lần - một lần cho mỗi lần lặp của bộ đếm.
Vì vậy, hãy nói rằng bạn muốn xuất ra một danh sách không có thứ tự, nếu danh sách mọi thứ được điền. Nếu bạn sử dụng vòng lặp
2 và bỏ qua trình bao bọc
3, đánh dấu của bạn sẽ trông như thế này:
Và nếu
0 trống, đầu ra kết xuất sẽ là:
Mà để lại dấu hiệu không cần thiết [và không hợp lệ].
Nhưng nếu bạn thêm vào một trình bao bọc có điều kiện
3, bạn có thể làm điều này:
Và nếu
0 trống, không có đánh dấu nào sẽ là đầu ra.Đó chỉ là một ví dụ. Có rất nhiều cách sử dụng cho trình bao bọc có điều kiện
3 và trình bao bọc có điều kiện
3 phục vụ một mục đích hoàn toàn khác so với vòng lặp
2.