Hướng dẫn what is use of have_posts in wordpress? - sử dụng has_posts trong wordpress là gì?

have_posts (): boolbool

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

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;
}
0.

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ảo

function have_posts() {
	global $wp_query;
	return $wp_query->have_posts();
}

Xem trên Tracview trên GitHub View on GitHub



Thay đổi
Phiên bảnSự mô tả
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:

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;
}
4. Xem tất cả các tài liệu tham khảo

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


do_action_ref_array ('loop_end', wp_query $ truy vấn)( 'loop_end', WP_Query $query )

Hỏa hoạn khi vòng lặp kết thúc.

do_action ('loop_no_results', wp_query $ truy vấn)( 'loop_no_results', WP_Query $query )

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.



Thay đổi
Phiên bảnSự mô tả
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.

array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query($args);

if($the_query->have_posts()):

while ($the_query->have_posts()) : $the_query->the_post();
	// Process Your Statements
	//ex the_content()
	echo the_title();
endwhile;

endif;
?>

Định dạng 3:

array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>

Đị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):

  • 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
  • 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;
    }
    
    9
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Vì vậy, những gì đang xảy ra, và theo thứ tự nào?

  • Truy vấn được gọi:
    • 1
    • 2
    • 3
  • Mẫu được chọn:
    • 4
  • Mẫu được tải/đầu ra. Các hành động sau được bắn bởi mẫu:
    • 5
    • 6
    • 7
    • array($array),
          'post_type' => 'post',
          );
      	
      $the_query = new WP_Query($args);
      
      if($the_query->have_posts()):
      
      while ($the_query->have_posts()) : $the_query->the_post();
      	// Process Your Statements
      	//ex the_content()
      	echo the_title();
      endwhile;
      
      endif;
      ?>
      
      6
    • array($array),
          'post_type' => 'post',
          );
      	
      $the_query = new WP_Query($args);
      
      if($the_query->have_posts()):
      
      while ($the_query->have_posts()) : $the_query->the_post();
      	// Process Your Statements
      	//ex the_content()
      	echo the_title();
      endwhile;
      
      endif;
      ?>
      
      7
    • 8

Vì vậy,

7, bị bắn bởi 
array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>
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)

array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>
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ề
array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>
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 (

array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>
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:

  • 1
  • 2
  • 3
  • 4 - Mẫu được chọn và tải ở đây. Đây là điểm mẫu không trả lại. Mẫu không thể thay đổi sau thời điểm này.template is chosen and loaded here. This is the template point of no return. The
    template cannot change after this point.
  • ...
  • 7 - ​​Postdata được thiết lập ở đây, như một phần của cuộc gọi vòng lặp. Điều này được gọi bên trong mẫu và mẫu không thay đổi dựa trên dữ liệu có sẵn trong đối tượng truy vấnpostdata is setup here, as part of the loop call. This is called inside the template, and the template does not change based on available data in the query object

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 
array($array),
    'post_type' => 'post',
    );
	
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo get_the_title();
	}
}
?>
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.

HAS_POSTS là gì?

có_posts (): bool.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. Determines whether current WordPress query has posts to loop over.

Vòng lặp được sử dụng để làm gì?

Vòng lặp là mã PHP được WordPress sử dụng để hiển thị các bài đăng.Sử dụng vòng lặp, quy trình WordPress mỗi bài đăng được hiển thị trên trang hiện tại và định dạng nó theo cách phù hợp với các tiêu chí được chỉ định trong các thẻ vòng lặp.Bất kỳ mã HTML hoặc PHP nào trong vòng lặp sẽ được xử lý trên mỗi bài đăng.display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post.

Vòng lặp được sử dụng cho trong WordPress là gì?

Vòng lặp trích xuất dữ liệu cho mỗi bài viết từ cơ sở dữ liệu WordPress và chèn thông tin phù hợp thay cho từng thẻ mẫu.Bất kỳ mã HTML hoặc PHP nào trong vòng lặp sẽ được xử lý cho mỗi bài đăng.extracts the data for each post from the WordPress database and inserts the appropriate information in place of each template tag. Any HTML or PHP code in The Loop will be processed for each post.

Wp_reset_postdata () là gì?

wp_reset_postdata () khôi phục biến $ post toàn cầu cho bài đăng hiện tại trong truy vấn chính (có trong biến $ wp_query toàn cầu trái ngược với biến $ sec_query), do đó các thẻ mẫu đề cập đến vòng lặp truy vấn chính theo mặc định.Thí dụ.Sao chép mã mở rộng.restores the global $post variable to the current post in the main query (contained in the global $wp_query variable as opposed to the $sec_query variable), so that the template tags refer to the main query loop by default again. Example. Copy Expand code.