すべての投稿を変更して、ハードコーディングされた同じ特徴のある画像が同じになるようにするにはどうすればよいですか。この葉巻を言う:
https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg
(私は実際にはこれをやりたくありません - しかしそれはもっと複雑なものの中のつまずきブロックです。)
私はそれがこれであるべきだと思います:
function set_post_thumbnail( $post, $thumbnail_id ) {
$thumbnail_id = "https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg";
update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id );
}
add_action( 'save_post', 'set_post_thumbnail' );
...しかし葉巻はありません。何が足りないの?ありがとうございます。
方法1:publish_post
フック*とmedia_sideload_image()
を使用する
ここでは、URLから画像をアップロードして投稿に添付し、投稿が公開されたときにおすすめの画像として設定します。
*実際には、動的フック{$new_status}_{$post->post_type}
を使用しています。これはpost
投稿タイプをpublish
ステータスに移行することを示します。詳細は wp-includes/post.php
を参照してください。
このコード例は、投稿タイプpost
を公開するときに適用されます。手動で設定されている場合は、おすすめの画像を自動的に割り当てないようにチェックが行われています。必要に応じてこれをカスタマイズしてください。
/**
* Download image, attach it to the current post, and assign it as featured image
* upon publishing the post.
*
* The dynamic portions of the hook name, `$new_status` and `$post->post_type`,
* refer to the new post status and post type, respectively.
*
* Please note: When this action is hooked using a particular post status (like
* 'publish', as `publish_{$post->post_type}`), it will fire both when a post is
* first transitioned to that status from something else, as well as upon
* subsequent post updates (old and new status are both the same).
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
add_action( 'publish_post', 'wpse_default_featured_image', 10, 2 );
function wpse_default_featured_image( $post_id, $post ) {
// Bail if there is already a post thumbnail set.
$current_post_thumbnail = get_post_thumbnail_id( $post_id );
if ( '' !== $current_post_thumbnail ) {
return;
}
$url = 'https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg';
$title = "The default featured image.";
$image = media_sideload_image( $url, $post_id, $title, 'id' );
set_post_thumbnail( $post_id, $image );
}
方法2:投稿のサムネイルにフィルタを適用する
フィルタを使用することで、投稿のサムネイルを「仮想的に」設定できます。この方法では、すべての投稿の投稿サムネイルをその場で簡単に変更できます。
フィルタ1: post_thumbnail_html
post_thumbnail_html
フィルタを使用して、投稿サムネイルのHTML出力を上書きすることができます。
/**
* Filters the post thumbnail HTML.
*
* @param string $html The post thumbnail HTML.
* @param int $post_id The post ID.
* @param string $post_thumbnail_id The post thumbnail ID.
* @param string|array $size The post thumbnail size. Image size or array of width and height
* values (in that order). Default 'post-thumbnail'.
* @param string $attr Query string of attributes.
*/
add_filter( 'post_thumbnail_html', 'wpse_post_thumbnail_html', 10, 5 );
function wpse_post_thumbnail_html( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
return '<img src="https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg" alt="Have a cigar">';
}
フィルタ2: get_post_metadata
メタキーで_thumbnail_id
を使用する。
これは、各投稿のサムネイルIDを異なるIDで上書きする別の方法です。
特別なサムネイル画像をアップロード/選択できるように(ローカルで、URLから、またはメディアライブラリから)カスタマイザ設定またはオプションページを実装することをお勧めします。その後、get_post_metadata
フィルタを使用して、各投稿サムネイルのメタキー_thumbnail_id
に関連付けられている値を変更できます。
/**
* Dynamic hook: "get_{$meta_type}_metadata"
*
* Filters whether to retrieve metadata of a specific type.
*
* The dynamic portion of the hook, `$meta_type`, refers to the meta
* object type (comment, post, or user). Returning a non-null value
* will effectively short-circuit the function.
*
* @param null|array|string $value The value get_metadata() should return - a single metadata value,
* or an array of values.
* @param int $object_id Object ID.
* @param string $meta_key Meta key.
* @param bool $single Whether to return only the first value of the specified $meta_key.
*/
add_filter( 'get_post_metadata', 'wpse_featured_image_id_override', 100, 4 );
function wpse_featured_image_id_override( $value, $object_id, $meta_key, $single ) {
$thumbnail_id_key = '_thumbnail_id';
// Bail if this is not the correct meta key. Return the original value immediately.
if ( ! isset( $meta_key ) || $thumbnail_id_key !== $meta_key ) {
return $value;
}
// Add additional guard clauses if necessary... (check post type, etc.)
// Get the id for an image uploaded elsewhere.
// This could be pulled from the customizer or a plugin options page.
return 807; // Example ID
}
あなたは単にこれでページ/投稿を保存する際に(画像が設定されているかどうかにかかわらず)注目の画像を上書きすることができます:
//this is called on saving page/post
add_action('save_post', 'force_featured_image');
function force_featured_image( $post_id ){
//set the featured image
set_post_thumbnail( $post_id, [image_id] );
}
_ note _ '[image_id]'をあなたの画像IDに置き換えてください。
function wpb_autolink_featured_images( $html, $post_id, $post_image_id ) {
if (! is_singular()) {
$html = '<a href="' . get_permalink( $post_id ) . '" title="'
. esc_attr( get_the_title( $post_id ) ) . '">' . $html . '</a>';
return $html;
} else {
return $html;
}
}
add_filter( 'post_thumbnail_html', 'wpb_autolink_featured_images', 10, 3 );