Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=_thumbnail_id và meta_value=id tại sao ?
2 dòng dưới không thấy update
//UPDATE meta_value
// Finally! set our post thumbnail
<?php
class Auto_Save_Images_local {
function __construct()
{
add_filter( 'content_save_pre', array( $this, 'post_save_images' ) );
}
function post_save_images( $content )
{
if ( ( isset( $_POST['save'] ) || isset( $_POST['publish'] ) ) ) {
set_time_limit( 240 );
global $wpdb, $post;
$post_id = $post->ID;
$preg = preg_match_all( '/<img.*?src="(.*?)"/', stripslashes( $content ), $matches );
if ( $preg ) {
foreach ( $matches[1] as $image_url ) {
if ( empty( $image_url ) ) continue;
if ( get_option( 'upload_url_path' ) ) {
$checkdomain = @parse_url( get_option( 'upload_url_path' ) );
$domain = isset( $checkdomain['host'] ) ? $checkdomain['host'] : '' . $_SERVER['HTTP_HOST'] . '';
} else {
$domain = $_SERVER['HTTP_HOST'];
}
$pos = !empty( $domain ) && strpos( $image_url, $domain ) ? strpos( $image_url, $domain ) : FALSE;
if ($pos === FALSE ) {
//LINK NGOAI
//$res = $this->save_images( $image_url, $post_id );
//$replace = $res['url'];
//$content = str_replace( $image_url, $replace, $content );
} else {
//LINK TRONG
//Get the name file
$info_file = pathinfo( $image_url );
if ( $info_file['extension'] === "webp" ) continue;
$image_url_old = $image_url;
$res = $this->save_images( $image_url, $post_id );
$replace = $res['url'];
$content = str_replace( $image_url, $replace, $content );
$thumb_attach_id = attachment_url_to_postid( $image_url );
//UPDATE meta_value không thấy update
$wpdb->query(
"UPDATE $wpdb->postmeta
SET meta_value = $thumb_attach_id
WHERE post_id = $post_id AND meta_key = '_thumbnail_id' AND meta_value <> '0'"
);
}
}
}
}
remove_filter( 'content_save_pre', array( $this, 'post_save_images' ) );
return $content;
}
function save_images( $image_url, $post_id )
{
$stream_opts = [
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
"ciphers" => "DEFAULT:!DH",
]
];
$file = file_get_contents( $image_url, false, stream_context_create( $stream_opts ) );
$set_ext_image = '.webp';
$post = get_post( $post_id );
$posttitle = $post->post_title;
$postname = sanitize_title( $posttitle );
//$im_name = "$postname-$post_id.jpg";
$im_name = "$postname-$post_id". $set_ext_image;
$res = wp_upload_bits( $im_name, '', $file );
$this->insert_attachment( $res['file'], $post_id );
return $res;
}
function insert_attachment( $filename, $post_id )
{
// the file must be in the WP uploads directory. // tệp phải nằm trong thư mục tải lên WP.
//$filename = '/path/to/uploads/2013/03/filname.jpg';
// Get the path to the uploads directory. // Lấy đường dẫn đến thư mục uploads.
$dirs = wp_upload_dir();
// the ID of the post to which we are attaching. // ID của bài đăng mà chúng tôi đang đính kèm.
//$parent_post_id = $post_id;
// Check the post type that we use in the 'post_mime_type' field. // Kiểm tra loại bài đăng mà chúng tôi sử dụng trong trường 'post_mime_type'.
$filetype = wp_check_filetype( basename( $filename ), null );
$post = get_post( $post_id );
$posttitle = $post->post_title;
if ( isset( $posttitle ) ) {
$attachment = array(
//'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'guid' => $dirs['baseurl'] . '/' . _wp_relative_upload_path( $filename ),
'post_mime_type' => $filetype['type'],
'post_title' => sanitize_text_field( $posttitle ), //sanitize_text_field( $title ),
'post_excerpt' => sanitize_text_field( $posttitle ), //sanitize_text_field( $caption ),
'post_content' => sanitize_text_field( $posttitle ), //sanitize_text_field( $description ),
'post_status' => 'inherit'
);
} else {
$attachment = array(
//'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'guid' => $dirs['baseurl'] . '/' . _wp_relative_upload_path( $filename ),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
'post_excerpt' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
'post_content' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
'post_status' => 'inherit'
);
}
// Insert the attachment into the database. // Chèn tệp đính kèm vào cơ sở dữ liệu.
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id ); // $thumb_id = $attach_id
//require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); // $metadata = $attach_dat
wp_update_attachment_metadata( $attach_id, $attach_data );
// Finally! set our post thumbnail
//update_post_meta( $post_id, '_thumbnail_id', $attach_id ); // KO THAY UPDATE
return $attach_id;
}
}
new Auto_Save_Images_local();
Nguồn: viblo.asia