WordPress đặt hình ảnh nổi bật theo chương trình

Đặt một hình ảnh nổi bật không nhất thiết đảm bảo rằng nó cũng sẽ xuất ra dưới dạng og. thẻ hình ảnh trong plugin Yoast SEO. Nếu bạn muốn thêm siêu dữ liệu cần thiết, chúng tôi đã thực hiện các thay đổi bắt đầu từ v14. 0 của Yoast SEO cho WordPress về cách thực hiện tại đây — https. // nhà phát triển. sữa chua. com/blog/yoast-seo-14-0-adding-metadata/

Người bắt đầu chủ đề

Daniel Chase

[@risofweb]

2 năm, 5 tháng trước

Cảm ơn bạn đã phản hồi của bạn

Lý tưởng nhất là tôi muốn nói với Plugin Yoast rằng bài đăng vừa được cập nhật và để nó chạy bất kỳ chức năng nào khi bài đăng được cập nhật không lọc những gì được xuất ra. Nếu tôi chuyển đến màn hình chỉnh sửa trên bài đăng sau khi thực hiện set_post_thumbnail[] và chỉ cần nhấp vào cập nhật, nó sẽ đặt hình ảnh nổi bật là og. hình ảnh

Không lý tưởng, nhưng tôi đã chọn công việc “hỗ trợ băng bó” này để sử dụng. FYI, Tất cả các hình ảnh nổi bật của tôi đều có kích thước cố định, vì vậy tôi không cần phải lo lắng về kích thước hình ảnh

function hotswap_og_img[$str] {
	if [ is_singular['post'] ] {
		$image = get_the_post_thumbnail_url[$post->ID, 'full'];
		if [!empty[$image]] {
			return $image;
		}
    }
}
add_filter['wpseo_opengraph_image', 'hotswap_og_img'];

Dựa trên https này. //github. com/Yoast/wordpress-seo/issues/1060#issuecomment-481759769

Hỗ trợ plugin

Md Mazedul Islam Khan

[@mazedulislamkhan]

2 năm, 5 tháng trước

Cảm ơn bạn đã chia sẻ đoạn mã có liên quan với chúng tôi. Chúng tôi hiểu rằng bạn cần cập nhật trang có liên quan sau khi thay đổi hình ảnh nổi bật trước khi bạn có thể xem hình ảnh nổi bật có liên quan trong meta biểu đồ mở do Yoast SEO tạo. Để thực hiện việc này tự động, bạn sẽ cần sử dụng Yoast SEO v14. 0 được cung cấp ở trên bằng cách sử dụng triển khai tùy chỉnh

WordPress, trong phiên bản 2. 9 trở lên, hỗ trợ tính năng giao diện người dùng được gọi là hình thu nhỏ của bài đăng. Họ cũng gọi nó là "hình ảnh nổi bật", chỉ để giữ cho mọi thứ thú vị. Mục đích của tính năng giao diện người dùng này là cung cấp cho các nhà phát triển chủ đề một cách tiêu chuẩn để lấy và hiển thị hình thu nhỏ hoặc hình ảnh chính cho một bài đăng nhất định

Trước khi tính năng này khả dụng, hầu hết các nhà phát triển chủ đề phải tìm cách tiếp cận riêng để lưu trữ và tham chiếu hình thu nhỏ, dẫn đến nhiều vấn đề không tương thích cho người dùng khi chuyển đổi chủ đề.

Vì tôi muốn mã AI Editor và AI Publisher của mình được khái quát hóa nhất có thể, nên tôi quyết định dành một ngày cuối tuần để cập nhật mã của mình để hỗ trợ các hình ảnh nổi bật, thay vì biến thể lưu trữ và truy xuất hình thu nhỏ bị hack của riêng tôi. Điều này sẽ cho phép tôi chuyển đổi chủ đề mà không cần phải nhập mã của chủ đề và dành hàng giờ để viết lại mô-đun hiển thị hình thu nhỏ cho mọi chủ đề tôi muốn sử dụng

Làm thế nào tôi tìm ra nó

Tôi đã mất rất nhiều thời gian để tìm bất kỳ tài liệu nào về cách biến tệp đính kèm thành hình ảnh nổi bật. WordPress Codex có một số thông tin tốt cho người viết chủ đề về việc sử dụng hình ảnh nổi bật, nhưng giả định chung là người dùng thực sẽ nhấp vào giao diện người dùng và tải lên hình ảnh. Tôi có 12.776 hình ảnh nổi bật mà tôi cần tạo, vì vậy tôi sẽ không làm điều đó bằng tay

Một cách để tìm hiểu cách WordPress thực hiện điều gì đó là xem qua mã. Nhưng điều đó rất tốn thời gian. Vì vậy, nếu có thể, tốt nhất bạn nên tìm cách khác. Những gì tôi đã làm là mở cơ sở dữ liệu trong trình xem MySQL [tôi thích HeidiSQL] và xem điều gì đã thay đổi khi tôi thêm dữ liệu

Tôi luôn sử dụng bản cài đặt WordPress giả, vì vậy thật dễ dàng để xem bản ghi được thêm hay xóa. Khi tôi thêm một hình ảnh vào một bài đăng, tôi nhận thấy rằng một bản ghi bài đăng mới đã được tạo, với parent_id trỏ đến bài đăng có nội dung chính. Nó cũng đặt loại bài đăng thành 'kế thừa'. Vấn đề là, khi bạn tải lên một hình ảnh bằng giao diện người dùng hình ảnh nổi bật, chính xác hành vi tương tự đã xảy ra. Hoàn toàn không có sự khác biệt trong bảng bài viết

Điều tiếp theo tôi làm là xem qua các bảng WordPress khác, đặc biệt chú ý đến bảng postmeta, bảng bổ sung các cặp khóa/giá trị cho một bài đăng nhất định. Hóa ra, mặc dù không có bản ghi postmeta mới nào được tạo khi tôi vừa thêm một hình ảnh, nhưng khi tôi thêm một hình ảnh nổi bật, một bản ghi được tạo với khóa '_thumb_id' được đặt thành giá trị ID của bài đăng hình ảnh kế thừa

Tôi đã kiểm tra thêm bằng cách xóa bản ghi đó và tôi nhận thấy rằng hình ảnh nổi bật đã biến mất khỏi giao diện người dùng. Khi tôi đặt bản ghi trở lại, hình ảnh nổi bật cũng trở lại

Bây giờ, như với tất cả các vụ hack, điều quan trọng là phải hiểu rằng vì điều này không được ghi lại nên các nhà phát triển cốt lõi có thể thay đổi điều này bất kỳ lúc nào. Không có vấn đề gì, bây giờ nó hoạt động và đó là tất cả những gì bạn có thể yêu cầu vào một kỳ nghỉ cuối tuần dài

Thực hiện

Bây giờ, trước khi tôi cho bạn xem mã của mình, hãy hiểu rằng mọi người đều có phong cách viết mã riêng, đây là mã dùng một lần và -- như tất cả các bạn đều biết -- lập trình không phải trách nhiệm công việc chính của tôi. Vì vậy, nếu bạn có đề xuất mang tính xây dựng về cách viết mã, tôi rất muốn nghe chúng. Ngoài ra, trong khi chúng tôi đang ở đó, đây là một tuyên bố từ chối trách nhiệm khác. Tôi không đảm bảo điều này sẽ hiệu quả với bạn, tôi không thể gỡ lỗi mã của bạn và số dặm của bạn có thể thay đổi. Mạnh mẽ lên

Mã của tôi cần làm nhiều việc hơn là chỉ lấy nội dung phương tiện hiện có và đăng ký nội dung đó làm hình ảnh nổi bật. Mã của tôi đang thực hiện quy trình nhập đầy đủ. Vì vậy, tôi đã tạo một plug-in sử dụng một lần lặp lại qua mọi bài đăng đã xuất bản và truy xuất tên tệp hình ảnh mà tôi đã đặt trước đó trong một trường tùy chỉnh. Sau đó, nó chạy đoạn mã [đã được khử trùng] sau đây, "chèn" hình ảnh dưới dạng tệp đính kèm WordPress vào bài đăng

$wp_filetype = wp_check_filetype[$filename, null ];
$mime_type = $wp_filetype[type];
$attachment = array[
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace['/\.[^.]+$/', '', basename[$filename]],
'post_name' => preg_replace['/\.[^.]+$/', '', basename[$filename]],
'post_content' => '',
'post_parent' => $post_id,
'post_excerpt' => $thumb_credit,
'post_status' => 'inherit'
];
$attachment_id = wp_insert_attachment[$attachment, $filename, $post_id];
if[$attachment_id != 0] {
$attachment_data = wp_generate_attachment_metadata[$attachment_id, $filename];
wp_update_attachment_metadata[$attachment_id, $attach_data];
update_post_meta[$post_id, '_thumbnail_id', $attachment_id];
}
Bạn có thể đã lưu ý, trong đoạn trước, tôi đã đặt từ "chèn" trong dấu ngoặc kép. Đó là bởi vì chức năng wp_insert_attachment không thực sự chèn tệp đính kèm. Những gì nó làm là cập nhật các bản ghi chức năng để chỉ ra rằng một tệp đính kèm sẽ ở đó, nếu nó thực sự đã được di chuyển vào vị trí. wp_update_attachment_metadata cố gắng ghi thêm thông tin về tệp đính kèm hình ảnh, nhưng hóa ra nó không hoạt động trong ứng dụng của tôi nếu không có một chút nước sốt đặc biệt

WordPress sử dụng khái niệm bộ lọc chức năng, đơn giản là các hàm PHP mà nó gọi trong quá trình thực thi các chức năng cụ thể của WordPress. Một bộ lọc như vậy là bộ lọc _wp_relative_upload_path, mà WordPress gọi trong quá trình wp_insert_attachment, khi nó cần tạo một đường dẫn tải lên tương đối [i. e. , đường dẫn từ thư mục hiện tại, thay vì từ thư mục gốc]

Bộ lọc này tỏ ra cần thiết, bởi vì tôi đã phát hiện ra rằng wp_insert_attachment không thực sự di chuyển các tệp hình ảnh vào vị trí trong thư mục /files, nơi WordPress mong đợi chúng

Vì vậy, bằng cách tạo bộ lọc sau, tôi có thể thực hiện di chuyển một lần các tệp đó đến vị trí của chúng, sau đó trả lại thông số kỹ thuật tệp tương đối hợp lệ

add_filter['_wp_relative_upload_path', 'zenpress_wp_plugin_convertaithumbs_upload_path'];

chức năng zenpress_wp_plugin_convertaithumbs_upload_path[$old_file] { $uploads = wp_upload_dir[];

$file_name = basename[$old_file]; . '/'. $file_name; . file_exists[$new_file] và. is_dir[$new_file] và. is_dir[$old_file]] { // sao chép cậu bé xấu số này vào vị trí mới copy[$old_file, $new_file]; . '/'. $file_name; . Để biến nội dung nào đó thành hình ảnh nổi bật, chỉ cần đặt '_thumb_id' thành giá trị của ID hình ảnh bài đăng, như tôi đã làm ở đây

update_post_meta[$post_id, '_thumbnail_id', $attachment_id];
Một lưu ý cuối cùng. lần chạy đầu tiên của tôi đã vượt quá thời gian thực thi cho phép của PHP, vì vậy trước tiên tôi nghĩ rằng mình sẽ truy cập và sửa đổi tệp php của mình. ban đầu. Nhưng tôi thực sự thích mã đăng nhập lại, vì vậy, thay vào đó, tôi quyết định chỉ kiểm tra ngay từ đầu để xem '_thumbnail_id' có tồn tại không. Nếu đúng như vậy, tôi sẽ bỏ qua việc xử lý bài đăng đó. Làm việc như người ở. Có nhiều cách tốt hơn để đảm bảo PHP không làm quá thời gian xử lý của nó, nhưng như tôi đã đề cập, đây là mã sử dụng một lần, vì vậy tôi chỉ tìm giải pháp phù hợp. Đó chính là tinh thần DIY-IT dành cho bạn -- đầu tiên và quan trọng nhất, hãy hoàn thành nó

Vì vậy, có bạn đi. Tôi sẽ làm việc với nhiều PHP và WordPress hơn trong những tháng tới, vì vậy hãy chú ý theo dõi để tìm hiểu sâu hơn về các tính năng thú vị

Chủ Đề