注目の画像と投稿画像を区別したい。
計画は注目の画像に複数のサイズを与えることですが、投稿の中にある/接続されている画像はデフォルトサイズのみが必要です。
intermediate_image_sizes
を使用して、どのカスタム投稿タイプがどの画像サイズに割り当てられるかをフィルタリングすることができます。
/** Don't Make Extra Sizes **/
function post_type_sizes( $image_sizes ){
$post_type_size_array = array('icon', 'med-thumb', 'large', 'full');
$post_image_sizes = array('thumbnail', 'medium', 'large', 'full');
if( isset($_REQUEST['post_id']) && 'cpt_test' === get_post_type($_REQUEST['post_id']) )
return $post_type_size_array;
else
return $post_image_sizes;
return $image_sizes;
}
add_filter('intermediate_image_sizes', 'post_type_sizes', 999 );
しかし、おすすめ画像には複数のカスタムサイズのみを指定し、TinyMCEのデフォルトサイズ(サムネイル、中、大、フル)にアップロードされた投稿は残しておきます。
_thumbnail_id
のメタ値をフィルタリングすることでこれを行うことができます。
add_filter( 'update_post_metadata', 'generate_featured_image_sizes', 10, 5 );
add_filter( 'add_post_metadata', 'generate_featured_image_sizes', 10, 5 );
function generate_featured_image_sizes( $check, $object_id, $meta_key, $meta_value, $unique_or_prev ) {
if ( $meta_key == '_thumbnail_id' ) {
// regenerate previous featured image thumbs if it exists
if ( false !== ( $prev_thumb_id = get_post_meta( $object_id, '_thumbnail_id', true ) ) ) {
$prev_new_metadata = wp_generate_attachment_metadata( $prev_thumb_id, get_attached_file( $prev_thumb_id ) );
if ( ! is_wp_error( $prev_new_metadata ) )
wp_update_attachment_metadata( $prev_thumb_id, $prev_new_metadata );
}
// remove all normal image sizes before we add our filter
cleanup_attachment_images( $meta_value );
// filter image sizes for featured
add_filter( 'intermediate_image_sizes', 'featured_image_sizes', 9999 );
// regenerate thumbnails for featured
$new_metadata = wp_generate_attachment_metadata( $meta_value, get_attached_file( $meta_value ) );
if ( ! is_wp_error( $new_metadata ) )
wp_update_attachment_metadata( $meta_value, $new_metadata );
// remove featured sizes from previous featured image
if ( isset( $prev_thumb_id ) && $prev_thumb_id )
cleanup_attachment_images( $prev_thumb_id );
// tidy up
remove_filter( 'intermediate_image_sizes', 'featured_image_sizes', 9999 );
}
return $check;
}
function featured_image_sizes( $sizes ) {
return array( 'large', 'featured', 'slider' );
}
function cleanup_attachment_images( $attachment_id ) {
$uploadpath = wp_upload_dir();
$intermediate_sizes = array();
foreach ( get_intermediate_image_sizes() as $size ) {
if ( $intermediate = image_get_intermediate_size( $attachment_id, $size ) )
$intermediate_sizes[] = $intermediate;
}
// remove intermediate and backup images if there are any
foreach ( $intermediate_sizes as $intermediate ) {
/** This filter is documented in wp-admin/custom-header.php */
$intermediate_file = apply_filters( 'wp_delete_file', $intermediate[ 'path' ] );
@ unlink( path_join( $uploadpath[ 'basedir' ], $intermediate_file ) );
}
}
サムネイルを再作成することは、添付ファイルのメタデータを生成および更新する場合にすぎません。そのため、注目の画像が変更されるたびに再生成することで、目的の効果が得られるはずです。
これはアップロード時に機能しますが、注目の画像が変更されたときにも機能します。それに加えて、それは古いサムネイルのために親指を再生成するので、それは再び通常のサイズの通常の画像のようです。
add_post_metadata
およびupdate_post_metadata
フックを使用する理由は、現在の値beforeにアクセスできるようにするためです。これはデータベース内で更新されます。
_ note _ 特集画像のメディアポップアップの追加とエディタの間には実質的な違いはありません。これらのリンクは異なる状態でポップアップを開くだけなので、どの状態が要求されたかを知る簡単な方法はありません。 )画像がアップロードされているとき、それ故に私が上に示したアプローチ。
_ update _ 添付ファイル用に生成されたサムネイルのセットを削除するために呼び出すことができる関数を追加しました。新しい添付ファイルのメタデータを生成する前にこれを呼び出します。あなたはそれが引数としてそれらを渡すことができるようにそれが削除するか、または関数を修正する画像サイズをフィルターにかけることさえできます。
あなたもこれを試すことができます
function post_type_sizes( $image_sizes ){
$feature_image_sizes = array('thumbnail');
// checking for feature image uploading or not
if( isset($_REQUEST['post_id']) && 'post' === get_post_type($_REQUEST['post_id']) && get_post_meta( $_REQUEST['post_id'], 'feature_image_uploading', true ) ){
update_post_meta( $_POST['post_id'],'feature_image_uploading', false );
return $feature_image_sizes;
}
return $image_sizes;
}
add_filter('intermediate_image_sizes', 'post_type_sizes', 999 );
add_action('admin_footer', 'monksinc_notify_feature_image_event', 9999 );
function monksinc_notify_feature_image_event(){
global $pagenow, $post;
if( 'post.php' !== $pagenow && 'post' !== get_post_type( $post->ID ) )
return;
?>
<script>
(function(){
jQuery('#set-post-thumbnail').click(function(e){
e.preventDefault();
jQuery.post(
ajaxurl,
{ action: 'set_post_thumbnail_notify', post_id: jQuery('#post_ID').val() },
function( response ){
console.log(response);
}
);
});
})();
</script>
<?php
}
add_action( 'wp_ajax_set_post_thumbnail_notify', 'set_post_thumbnail_notify_callback' );
function set_post_thumbnail_notify_callback(){
$result = array( 'status'=> 'fail' );
if( isset( $_POST ) && 'set_post_thumbnail_notify' === $_POST['action'] && '' !== $_POST['post_id'] ){
update_post_meta( $_POST['post_id'],'feature_image_uploading', true );
$result = array( 'status'=> 'success' );
}
echo json_encode($result);
die();
}