WordPress lấy nội dung trang bằng slug
Điều này thú vị, với nhiều năm kinh nghiệm làm việc với WordPress, tôi chưa bao giờ xử lý loại vấn đề này. Tôi đã tìm kiếm trong codex và nhận thấy get_page_by_path là giải pháp lý tưởng thay vì trực tiếp tạo truy vấn tới cơ sở dữ liệu
Để lấy nội dung trang từ API WP dựa trên sên, chúng tôi có thể sử dụng yêu cầu này Show /pages?filter[slug]=sample-page điều tương tự sẽ xảy ra với bài viết /posts?filter[slug]=hello-world nhưng làm cách nào để lấy nội dung chỉ dựa trên slug và không xác định loại nội dung (trang, bài đăng. ) giống như wordpress 'gốc' đang làm? add_action( 'rest_api_init', function () { register_rest_route( 'my-theme/', 'get-by-slug', array( 'methods' => 'GET', 'callback' => 'my_theme_get_content_by_slug', 'args' => array( 'slug' => array ( 'required' => false ) ) ) ); } ); và tiếp theo, hãy tạo chức năng gọi lại cho URL thuần function my_theme_get_content_by_slug( WP_REST_Request $request ) { // get slug from request $slug = $request['slug']; // get content by slug $return['content'] = get_page_by_path( $slug, ARRAY_A ); // add comments to our content $return['content']['comments'] = get_comments( array( 'ID' => $return['content']['ID'] ) ); $response = new WP_REST_Response( $return ); return $response; }
$query = new WP_Query( array( 'post_type' => 'any','name'=>'slug' ) ); Thông tin thêm có thể được tìm thấy ở đây Tôi đã từng viết các hàm tùy chỉnh để trả về các liên kết cố định này từ tên trang hoặc sên cho đến khi tôi phát hiện ra rằng bạn có thể chuyển function my_theme_get_content_by_slug( WP_REST_Request $request ) { // get slug from request $slug = $request['slug']; // get content by slug $return['content'] = get_page_by_path( $slug, ARRAY_A ); // add comments to our content $return['content']['comments'] = get_comments( array( 'ID' => $return['content']['ID'] ) ); $response = new WP_REST_Response( $return ); return $response; }3 một hàm sẽ trả về ID Dưới đây là một số ví dụ về việc nhận permalinks theo tên trang hoặc sên trong WordPress Nhận WordPress Permalink theo tên trang
Nhận WordPress Permalink bằng Slug trang
Nhận WordPress Permalink Cha/ConNếu bạn có một hệ thống phân cấp trang, bạn sẽ phải chuyển toàn bộ sên bao gồm cả trang gốc cho hàm function my_theme_get_content_by_slug( WP_REST_Request $request ) { // get slug from request $slug = $request['slug']; // get content by slug $return['content'] = get_page_by_path( $slug, ARRAY_A ); // add comments to our content $return['content']['comments'] = get_comments( array( 'ID' => $return['content']['ID'] ) ); $response = new WP_REST_Response( $return ); return $response; }4 Ví dụ. Để có được permalink sử dụng phương thức với trang con, bạn cần chuyển toàn bộ slug. Trong trường hợp này, chúng tôi có một trang con có tên là "Các bên" với trang mẹ có tên là "Sự kiện" Có một số cách để lấy slug của trang hiện tại hoặc bài đăng trong WordPress. Đơn giản nhất, slug của bài đăng hoặc trang có thể được truy xuất bằng cách truy cập thuộc tính post_name của đối tượng bài đăng toàn cầu. Phương thức đầu tiên hiển thị bên dưới truy cập thuộc tính post_name đó trong biến $post trong khi tùy chọn thứ hai bên dưới sử dụng phương thức get_post_field Cả hai phương pháp bên dưới đều sử dụng biến $post toàn cầu, nhưng nếu bạn chỉ có quyền truy cập vào id bài đăng của trang hiện tại, thì tùy chọn thứ hai cung cấp một phương pháp thay thế sử dụng post_id để lấy sên lựa chọn 1. Truy cập thuộc tính post_name của Biến bài đăng toàn cầuTruy cập thuộc tính post_name của đối tượng bài đăng toàn cầu
Đối với thông tin của bạn, trong WordPress, các trang là một loại bài đăng, đó là lý do tại sao biến $post cung cấp cho bạn thông tin về trang. Ngoài ra, đối tượng bài đăng toàn cầu chứa dữ liệu được liên kết với trang hoặc bài đăng hiện tại đang được truy cập. Biến toàn cầu này có sẵn bên trong vòng lặp của WordPress. Vòng lặp WordPress là “mã PHP được WordPress sử dụng để hiển thị các bài đăng” trên mỗi https. // codex. báo chí. org/The_Loop. Lựa chọn 2. Sử dụng phương thức get_post_fieldBạn cũng có thể sử dụng chức năng get_post_field để lấy trang hiện tại hoặc đăng slug. NẾU bạn đang ở trong vòng lặp, đoạn mã này giống như sau ________số 8Nếu bạn ở bên ngoài vòng lặp đăng bài, bạn sẽ cần đối số thứ hai cho hàm get_post_field. Đối với đối số thứ hai đó, bạn có thể sử dụng giá trị $post_id. Xem mã dưới đây làm ví dụ Loại trả về bắt buộc. Một trong các ĐỐI TƯỢNG, ARRAY_A hoặc ARRAY_N, tương ứng với đối tượng WP_Post, mảng kết hợp hoặc mảng số tương ứngMặc định. 5 6 chuỗi . mảng Không bắt buộcLoại bài đăng hoặc mảng các loại bài đăng. Mặc định Mặc định. 7WP_Post. mảng. null WP_Post (hoặc mảng) nếu thành công hoặc null nếu thất bại. Tập tin. 9. Xem tất cả tài liệu tham khảo/posts?filter[slug]=hello-world4
Nhận ngày thay đổi cuối cùng cho nhóm bộ đệm được chỉ định wp_cache_set() wp-gồm/cache. phpLưu dữ liệu vào bộ đệm esc_sql() wp-gồm/định dạng. phpThoát dữ liệu để sử dụng trong truy vấn MySQL wp_cache_get() wp-gộp/cache. phpTruy xuất nội dung bộ đệm từ bộ đệm theo khóa và nhóm get_post() wp-gồm/bài đăng. phpTruy xuất dữ liệu bài đăng được cung cấp ID bài đăng hoặc đối tượng bài đăng wpdb. get_results() wp-includes/class-wpdb. phpTruy xuất toàn bộ tập kết quả SQL từ cơ sở dữ liệu (i. e. , nhiều hàng) Truy xuất URL để nhúng một bài đăng cụ thể vào iframe wp_resolve_numeric_slug_conflicts() wp-gồm/viết lại. phpGiải quyết các sên số va chạm với permalinks ngày wp_install_maybe_enable_pretty_permalinks() wp-admin/gồm/nâng cấp. phpCó thể kích hoạt permalinks đẹp khi cài đặt Phân tích yêu cầu để tìm đúng truy vấn WordPress WP_Query. is_page() wp-includes/class-wp-query. phpLà truy vấn cho một trang hiện có? WP_Query. is_single() wp-includes/class-wp-query. phpLà truy vấn cho một bài viết hiện có? WP_Query. get_posts() wp-includes/class-wp-query. phpTruy xuất một mảng các bài đăng dựa trên các biến truy vấn WP_Query. parse_query() wp-includes/class-wp-query. phpPhân tích cú pháp chuỗi truy vấn và đặt kiểu truy vấn boolean url_to_postid() wp-gộp/viết lại. phpKiểm tra một URL và cố gắng xác định ID bài đăng mà nó đại diện
|