オンラインで見つけて必要に応じて編集したこれら2つの機能があります。
私がやろうとしているのは、ワードプレスの投稿のサムネイルを、関数自体の画像内で以前に設定されたデフォルト、または投稿に埋め込まれた最初の画像のいずれかに設定することです。
しかし、どこかで何かがうまくいかなかった...
wptuts_save_thumbnail($post_id) - > 投稿のサムネイルをデフォルトに設定するか、まだ設定されていない場合は最初の画像に設定します(投稿の作成者によって...)!
function wptuts_save_thumbnail( $post_id ) {
$post_thumbnail = get_post_meta( $post_id, '_thumbnail_id', true );
if (!wp_is_post_revision($post_id)) { // Verify that the post is not a revision
if (empty($post_thumbnail)) { // Check if Thumbnail does NOT exist!
$firstImg = firstImg($post_id); // Get the first image of a post (if available)
if(!$firstImg){ // if available, update the post thumbnail
update_post_meta( $post_id, '_thumbnail_id', 'link to default image here' );
} else { // else -> set thumbnail to default thumbnail
update_post_meta( $post_id, '_thumbnail_id', $firstImg );
}
}
}
}
firstImg($post _id) -> 投稿の最初の画像を取得するために使用されます (ID による)
function firstImg($post_id) {
$post = get_post($post_id);
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches[1][0];
$urlLength = strlen(site_url());
$first_img = substr($first_img, $urlLength);
if(empty($first_img)){
return false;
}
return $first_img;
}
これらの関数の唯一の問題は、if(!$firstImg) - else
ステートメントにあります。
画像は、投稿に画像が埋め込まれているかどうかにかかわらず、常にデフォルトに設定されます。
$firstImg
実際、最初の画像が存在する場合はそれを返すため、問題は 2if
のいずれかにある必要があります: if(empty($first_img))
OR if(!$firstImg)
.
問題の手がかりを探してみましたが、何も見つかりませんでした。
うまくいけば、誰かがこの問題に光を当てることができます:)
事前に感謝します!
追加情報:
- 両方の機能がfunctions.php
私のテーマに書かれています。
-新しい投稿が公開さwptuts_save_thumbnail($post_id)
れるたびに実行するように設定されています。
- 返される場合は、画像の相対パス(つまり、/wp-contents/uploads/img.jpg)、または.$first_img
false