Trang bên ngoài được tích hợp vào WordPress trả về lỗi 404


7

Tôi có một tập lệnh mà tôi muốn gọi qua AJAX từ chủ đề WordPress của mình, nó dựa trên một số chức năng cốt lõi của WordPress vì vậy tôi bao gồm tiêu đề blog WordPress như vậy:

define( 'WP_USE_THEMES', false );
require( '../../../../wp-blog-header.php' );

Ở đâu đó trong quá trình xử lý wp-blog-header.phpWordPress đặt tiêu đề 404 khiến yêu cầu AJAX của tôi không thành công, mặc dù tập lệnh tôi đang gọi tồn tại và đang trả về nội dung.

Tôi đã thêm vào status_header( 200 );sau đoạn trích đó thay đổi tiêu đề trạng thái trở lại 200 và giải quyết vấn đề, tuy nhiên nó cảm thấy rất giống một vụ hack, vì vậy tôi chỉ tự hỏi liệu có giải pháp nào được đề xuất cho vấn đề này không?


1
Tôi nghĩ rằng bạn nhận được một tiêu đề 404 trong nội bộ, vì WP_Query cố gắng giải quyết trang được yêu cầu mà nó không thể. Tôi sẽ tìm một số cờ / const / trick để làm cho WP_Query không thực thi / quá tải để không cần phải đốt tài nguyên mà không cần gì.
hakre

Tôi nghĩ rằng đây là một giải pháp hợp lý. Tôi gặp phải vấn đề tương tự trong một chiêu bài khác - khi chia sẻ một số mã giữa ứng dụng php và trang WordPress có liên quan chặt chẽ. PHP sẽ tạo ra một mã trạng thái 404 giả. Hầu hết các trình duyệt sẽ bỏ qua trạng thái 404 nếu nội dung được trả về; tuy nhiên, đôi khi IE sẽ không hiển thị trang nếu tùy chọn "thông báo lỗi HTTP thân thiện" được đặt. Đặt status_header ('200') sau khi yêu cầu wp-blog-header.php đã giải quyết nó.
Jan Hettich

Nghe có vẻ như một kiến ​​trúc được thiết kế kém. Kịch bản nằm ngoài WordPress, nhưng phụ thuộc vào chức năng WordPress nội bộ? Là tập lệnh trên cùng một máy chủ với cài đặt WordPress? Nếu vậy, tại sao không đặt nó trong một plugin? Nếu không, nó nên bao gồm BackPress . Nó sử dụng các chức năng WP để làm gì? Có thể chủ đề của bạn sẽ vượt qua tất cả dữ liệu cần thiết để không phải sử dụng các chức năng WP.
Ian Dunn

Đây là một cơn ác mộng bảo trì, sử dụng các móc WP AJAX rất nhiều, đơn giản và dễ dàng hơn, ít nỗ lực hơn nhiều
Tom J Nowell

Ứng dụng PHP bên ngoài này bạn đang gọi WP từ đâu?
Tom J Nowell

Câu trả lời:


3

Bạn nên bao gồm wp-load.php, không wp-blog-header.php(chỉ dành riêng cho sử dụng bởi WordPress). Đây rất có thể là nguyên nhân của vấn đề của bạn.


cám ơn! một số hướng dẫn nói bao gồm wp-blog-header.php .. đó là vấn đề
yeahman

1

Có, có một giải pháp được đề xuất cho việc sử dụng Chức năng WordPress thông qua AJAX và đó là sử dụng các wp_ajaxhook. bạn có thể thấy một ví dụ rất chi tiết trong câu trả lời của tôi về "Phương pháp viết các plugin hỗ trợ AJAX là gì? "


1
Cảm ơn câu trả lời thú vị của bạn, nhưng đó không phải là vấn đề tôi gặp phải. Tôi đang gọi một tập lệnh bên ngoài đến lõi WordPress cần bao gồm chức năng WordPress, tuy nhiên trong quá trình này, WordPress quyết định đặt tiêu đề 404. Xin lỗi nếu câu hỏi của tôi không rõ ràng.
David Hancock

0

Thay vì bao gồm WordPress bên trong 'Giải pháp A', bạn đã cân nhắc thực hiện theo cách khác, sử dụng API WP AJAX vượt trội / dễ dàng hơn rất nhiều và sau đó bao gồm 'Giải pháp A' trong WordPress?

Gọi wp-blog-header.php cho AJAX là một sai lầm lớn, tôi không thể nhấn mạnh mức độ đau đầu mà bạn giới thiệu, bảo mật và bảo trì khôn ngoan (ví dụ: câu hỏi này thể hiện một số điều đó)

Phương pháp ưa thích để viết các plugin hỗ trợ AJAX là gì?

Cũng bao gồm wp-load.phpkhôngwp-blog-header.php

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.