Wordpressテーマを作成していますが、投稿の最初の画像をサムネイルとして取得して、FacebookのOGメタタグで使用したいと思います。
関数を使ってみましたget_the_post_thumbnail()
が、htmlimg
要素が生成されます。また、投稿を作成するときに注目の画像を追加することなく、投稿の最初の画像を撮りたいと思います。
すべての投稿に対してすでにすべてのサムネイルが生成されているため、これは単純なはずです。私はそれを正しく理解していません。
ここでは、添付ファイルイベントを追加/編集するためにフックできる関数をいくつか作成しました。
function set_first_as_featured($attachment_ID){
$post_ID = get_post($attachment_ID)->post_parent;
if(!has_post_thumbnail($post_ID)){
set_post_thumbnail($post_ID, $attachment_ID);
}
}
add_action('add_attachment', 'set_first_as_featured');
add_action('edit_attachment', 'set_first_as_featured');
改善の余地はたくさんありますが、これも魅力のようです。添付ファイルのアップロード/編集のたびに、機能は投稿にすでに注目の画像が含まれているかどうかを確認します。そうでない場合は、問題の画像が注目の画像として設定されます。次のすべての画像は無視されます(投稿にはすでに注目の画像があるため)。
多分誰かがそれが役に立つと思うでしょう(あなたは私のコーディングの途中で解決策を見つけたので... :))
私はこの解決策を見つけました:
$size = 'thumbnail'; // whatever size you want
if ( has_post_thumbnail() ) {
the_post_thumbnail( $size );
} else {
$attachments = get_children( array(
'post_parent' => get_the_ID(),
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID',
'numberposts' => 1)
);
foreach ( $attachments as $thumb_id => $attachment ) {
echo wp_get_attachment_image($thumb_id, $size);
}
}
私は解決策を見つけました:
wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'thumbnail' )[0];
正常に動作します。
このコードをテーマのfunctions.phpに配置します。
// make the first image of WordPress post as featured image
function first_image_as_featured() {
global $post, $posts;
$first_img_featured = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img_featured = $matches [1] [0];
if(empty($first_img_featured)){ //Defines a default image
$first_img_featured = "/images/default.jpg";
}
return $first_img_featured;
}
次に、WordPressループ内に以下のコードを追加します。
<?php
if (has_post_thumbnail()) { ?>
<?php the_post_thumbnail(); ?>
<?php }
else { ?>
<img src="<?php echo first_image_as_featured(); ?>" />
<?php
}
?>
注目画像が設定されていない場合、最初の画像が自動的に注目画像として取得されます。出典:WordPress投稿の最初の画像を注目の画像として取得
私は上記の解決策を試しましたが、成功しませんでした。そこで、私は新しく簡単なソリューションを構築します。
function set_first_as_featured($post_id){
$medias = get_attached_media( 'image', $post_id );
if(!has_post_thumbnail($post_id)) {
foreach ($medias as $media) {
set_post_thumbnail($post_id, $media->ID);
break;
}
}
}
add_action('save_post', 'set_first_as_featured');
投稿を保存すると、このコードはサムネイルがあるかどうかを確認します。そうでない場合は、この投稿に添付されている最初の画像がサムネイルとして設定されます。