JSON trong WordPress là gì?

Gần đây, WordPress đang trải qua một quá trình chuyển đổi với JSON REST API ngày càng trở thành một thứ. Và một điều tốt ở đó, bởi vì cuối cùng nó cũng bắt kịp với phần còn lại của thế giới dựa trên dữ liệu, được hỗ trợ bởi JSON

JSON là gì

Nếu bạn không quen với JSON (viết tắt của Ký hiệu đối tượng JavaScript), chỉ cần đặt nó là một định dạng chuẩn mà chúng tôi biểu thị dữ liệu hoặc quan trọng hơn là một biểu diễn mà nhiều thiết bị, ngôn ngữ và giao thức hiểu được. Ví dụ, giả sử bạn có một người có một số thuộc tính. Đối tượng JSON của người đó sẽ giống như thế này

{
 "first-name": "Tomaz",
 "last-name": "Zaman",
 "age": 32,
 "address": {
 "country": "Slovenia"
 },
 "hobbies": [
 "skydiving",
 "movies"
 ]
}

Theo nhiều cách, JSON đã trở thành sự kế thừa của XML, chủ yếu là vì viết và đọc đơn giản hơn và nhanh hơn

xin vui lòng không có plugin

Thật không may, nếu không có plugin WP-REST-API, WordPress không xử lý tốt dữ liệu JSON hoặc hoàn toàn không. Đó là bởi vì tất cả các biểu mẫu đều gửi loại dữ liệu

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
2, nghĩa là khi bạn ĐĂNG nội dung nào đó (chẳng hạn như gửi một bài viết mới), dữ liệu sẽ được thoát và mã hóa trong URL. Đây thực sự là hành vi mặc định về cách các biểu mẫu HTML thông thường hoạt động, nhưng vì chúng tôi đang đề cập đến việc nhập dữ liệu trong bài viết này nên chúng tôi không có bất kỳ biểu mẫu nào ngay từ đầu, chỉ có dữ liệu.

Nhưng chúng tôi cần một số URL để gọi từ dịch vụ bên ngoài của chúng tôi để nhập dữ liệu, phải không? . wp_ajax. Vì đây là một dịch vụ nội bộ nên nó không có khái niệm về vị trí của

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
3 (URL cần gọi), vì vậy chúng tôi cần mã hóa cứng URL bằng hành động thích hợp, thường là như thế nào
{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
4

Khi nói đến hướng dẫn, tôi nghĩ sẽ tốt hơn nếu đưa ra một ví dụ thực tế, vì vậy ở đây tôi sẽ chỉ cho bạn cách chúng tôi nhập các nhà phát triển Có thể lập trình từ ứng dụng tùy chỉnh của chúng tôi (được tích hợp trong Ruby on Rails) vào WordPress, dưới dạng một loại bài đăng tùy chỉnh

Đăng ký móc

Để tận dụng sức mạnh của WordPress AJAX, chúng ta cần tạo hai hook/hành động sẽ kích hoạt chức năng nhập (đặt mã này — và tất cả mã bên dưới — trong hàm. php hoặc bất kỳ tệp nào khác có trong chủ đề hoặc plugin của bạn)

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
6

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
7

Bây giờ chúng ta cần xác định chức năng mà hai hành động này nối vào

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
8

$developer_data = json_decode( file_get_contents( 'php. //đầu vào' ) );

if ( compare_keys() ) {
insert_or_update( $developer_data );
}

wp_die();

}

Các phần quan trọng của chức năng này

  • dòng 3. tập lệnh đọc nội dung yêu cầu, giải mã định dạng và gán nó cho $developer_data
  • dòng 5. kiểm tra bảo mật được thực hiện (thêm về điều đó sau)
  • dòng 6. dữ liệu được chuyển đến một chức năng khác để tạo bản ghi nhà phát triển mới hoặc cập nhật bản ghi hiện có
  • dòng 9. đảm bảo không có gì đang được xử lý sau khi chúng tôi nhập nhà phát triển

Phần có liên quan nhất là nhập nhà phát triển, vì vậy hãy xem phần tiếp theo

Chèn hoặc cập nhật bản ghi

Trước khi tiếp tục, điều đáng chú ý là biểu diễn JSON của chúng tôi về nhà phát triển trông như thế nào (cách ứng dụng tùy chỉnh của chúng tôi gửi dữ liệu tới WordPress)

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}

Khi nhập,

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
9 trở thành tiêu đề bài đăng,
{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
0 trở thành nội dung bài đăng và thẻ, tốt, thẻ 🙂

Để xác định hành động nào trong hai hành động cần thực hiện, chúng tôi cần kiểm tra xem bản ghi đã tồn tại chưa và để làm được điều đó, chúng tôi sẽ sử dụng trường tùy chỉnh

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
1 trong loại bài đăng tùy chỉnh của mình. Ngoài ra, tôi cũng sẽ sử dụng một trường tùy chỉnh khác để lưu trữ toàn bộ JSON trong đó, vì nó là. Điều này có thể không hữu ích cho bạn nhưng chúng tôi sử dụng một số dữ liệu chỉ để hiển thị nó (như đánh giá), vì vậy chúng tôi có thể làm điều đó trong chủ đề của mình, không cần thêm trường nếu một số thuộc tính sẽ không bao giờ được sửa đổi trong WordPress. Tôi sẽ đặt tên cho trường tùy chỉnh này là
{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
2. Vui lòng sử dụng nhiều trường tùy chỉnh nếu cần nếu sự cố của bạn yêu cầu điều đó

Đây là mã đầy đủ (có giải thích bên dưới)

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
3

nếu (. $developer_data)
return false;

$args = mảng(
'meta_query' => mảng(
mảng(
'key' =
'value' => $developer_data->id
)
),
'post_type' => 'developer',
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit'),
'posts_per_page' => 1
);

$developer = get_posts( $args );

$developer_id = '';

if ($developer )
$developer_id = $developer[0]->ID;

$developer_post = mảng(
'ID' => $developer_id,
'post_title' => $developer_data->full_name,
'post_content' => $developer_data->bio,
'post_type' => 'developer',
'post_status' => ( $developer ) ? $developer[0]->post_status : 'publish'
);

$developer_id = wp_insert_post( $developer_post );

if ($developer_id ) {
update_post_meta( $developer_id, 'developer_id', $developer_data->id );

update_post_meta( $developer_id, 'json', addlashes( file_get_contents( 'php. //đầu vào' ) ) );

wp_set_object_terms( $developer_id, $developer_data->tags, 'developer_tag' );
}

print_r( $developer_id );

}

Trước khi chúng tôi làm bất cứ điều gì, chúng tôi kiểm tra xem

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
4 có thực sự chứa dữ liệu không (dòng 3) và sau đó chuẩn bị các đối số cho truy vấn của chúng tôi sẽ trả về một bản ghi hoặc không có bản ghi nào (dòng 6-18). Nếu nó tìm thấy một bản ghi hiện có, thì nó sẽ gán ID của nó cho biến
{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
5 (dòng 23), điều này rất quan trọng đối với WordPress. Khi chúng tôi sử dụng
{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
6, nó sẽ quyết định tạo bản ghi mới hay cập nhật bản ghi hiện có dựa trên việc ID có tồn tại hay không. Trong trường hợp của chúng tôi, chúng tôi cần ngăn trùng lặp nhưng số dặm của bạn có thể thay đổi, vì vậy hãy sửa đổi mã cho phù hợp

Sau khi bản ghi được tạo/cập nhật, chúng tôi cần cập nhật các trường tùy chỉnh của mình (thông qua

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
7). Như tôi đã đề cập trước đó, chúng tôi lưu dữ liệu JSON thô vào một trường để thuận tiện

Bởi vì chúng tôi sử dụng phân loại tùy chỉnh cho các nhà phát triển của mình, chúng tôi cũng cần cập nhật

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
8 cũng tự động cập nhật hoặc tạo thẻ khi cần

Bước cuối cùng, để cho ứng dụng bên ngoài của chúng tôi biết mọi thứ diễn ra suôn sẻ, chúng tôi chỉ cần in ra ID WordPress của bản ghi

Bảo mật thì sao?

Khi chúng tôi truy cập WordPress từ bên ngoài, chúng tôi không thể sử dụng các biện pháp bảo mật AJAX mặc định của nó (wp_nonce), vì vậy tôi phải đưa ra một giải pháp tùy chỉnh. Sự thật mà nói, tôi không tự nghĩ ra nó, tôi chỉ sao chép những gì GitHub làm – nếu nó tốt cho họ thì nó cũng tốt cho chúng tôi

Đây là chức năng

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
9

nếu (. ngay lập tức( $_SERVER['HTTP_X_CODEABLE_SIGNATURE'] ) ) {
ném Ngoại lệ mới( "Thiếu tiêu đề HTTP 'X-Codeable-Signature'. " );
}

danh sách( $algo, $hash ) = phát nổ( '=', $_SERVER['HTTP_X_CODEABLE_SIGNATURE'], 2 ) + mảng( '', '' );
$ . //đầu vào' );

if ( $hash. == hash_hmac( $algo, $raw_post, CODEABLE_KEY ) ) {
ném Ngoại lệ mới( 'Băm bí mật không khớp. ' );
}

trả về đúng;

}

Khi chúng tôi nhập dữ liệu của nhà phát triển vào WordPress, một tiêu đề đặc biệt sẽ được gửi cùng với yêu cầu giống như thế này.

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
20

Không làm phức tạp quá nhiều, chữ ký này được tạo từ nội dung yêu cầu (đối tượng nhà phát triển JSON của chúng tôi) và được ký bằng khóa riêng (được định nghĩa cả trong WordPress là

{
 "id": "1",
 "full_name": "Tomaz Zaman",
 "bio": "Codeable founder",
 "tags": [
 "CSS",
 "HTML",
 "PHP",
 "WordPress"
 ]
}
21 và trong ứng dụng tùy chỉnh của chúng tôi), sau đó chữ ký này được so sánh với cùng một chữ ký,

Phần kết luận

Tôi hiểu rằng hướng dẫn này có thể hơi nâng cao hơn một chút, nhưng sự thật là, JSON là một định dạng được hỗ trợ và sử dụng rộng rãi mà ngày càng có nhiều dịch vụ trực tuyến sử dụng (vâng, Facebook cũng vậy, đó là lý do tại sao bạn thấy các ô trống . Mà nó hoàn toàn sẽ

Để cảm ơn bạn đã dành thời gian theo dõi hướng dẫn này, tôi đã chuẩn bị mã ở trên trong một ý chính (được đóng gói thành một lớp, để khởi động), bạn có thể tự do sử dụng

Tôi cũng muốn cảm ơn Zoran Ugrina và những người tốt ở Advanced WordPress đã giúp tôi viết mã

Có thể mã hóa

Nhóm biên tập

Giới thiệu về tác giả

Nhóm biên tập có thể mã hóa bao gồm các chuyên gia WordPress và các chuyên gia có nhiều năm kinh nghiệm xây dựng, quản lý và phát triển các trang web do WordPress cung cấp

Làm cách nào để đọc JSON trong WordPress?

Cài đặt .
Đăng nhập vào cài đặt WordPress của bạn
Cài đặt plugin bằng cách tải lên json-content-importer. .
Kích hoạt plugin thông qua menu Plugins
Bấm vào menu “Trình nhập nội dung JSON” ở thanh bên trái. cài đặt bộ nhớ đệm cơ bản và thêm hướng dẫn về cách sử dụng
Thư mục bộ đệm. WP_CONTENT_DIR

WordPress có sử dụng JSON không?

API WordPress REST cung cấp giao diện để ứng dụng tương tác với trang web WordPress của bạn bằng cách gửi và nhận dữ liệu dưới dạng đối tượng JSON (Ký hiệu đối tượng JavaScript) .

Tôi có nên tắt WP JSON không?

Điều này cho phép các nhà phát triển tương tác với các trang web từ xa bằng cách gửi và nhận các đối tượng JSON. Tuy nhiên, hầu hết chủ sở hữu trang web không cần những tính năng này và có thể thông minh hơn nếu tắt API WordPress JSON REST . Không ai có thể phủ nhận những lợi ích mà API này mang lại cho các nhà phát triển WordPress.

API JSON được sử dụng để làm gì?

API JSON (Ký hiệu đối tượng JavaScript) là giao diện lập trình ứng dụng được thiết kế để trao đổi dữ liệu nhẹ (định dạng trao đổi dữ liệu dựa trên văn bản) giữa hai ứng dụng máy tính hoạt động trên cùng một thiết bị phần cứng hoặc giữa các máy tính khác nhau ở các khu vực địa lý khác nhau