問題描述
我有一些自定義縮圖大小,顯然其中一個在 set_post_thumbnail_size 中使用,這直接影響管理區域中的介面。
我想要做的是擷取我所在的管理頁面 (對於 post-type),並在上述功能中設定不同的大小,所以基本上我想要這樣做:
function setup_the_theme() {
add_theme_support( 'post-thumbnails' );
if ($post_type == 'type_A'){
set_post_thumbnail_size( 298, 167, true ); //portrait
} else {
set_post_thumbnail_size( 192, 108, true ); //landscape
}
add_image_size( 'top_articles', 298, 167, true ); //portrait
add_image_size( 'article_thumb', 203, 114, true ); //portrait
add_image_size( 'featured_articles', 60, 200, true ); //landscape
}
add_action( 'after_setup_theme', 'setup_the_theme' );
我懷疑在這個週期中太早了解我正在編輯哪個帖子型別。
最佳解決方案
找出您正在編輯的專案的帖子型別並將媒體上傳到的更簡單的方法:
$type = get_post_type($_REQUEST['post_id']);
如上所述,當您嘗試上傳某些內容時,Lightbox 重疊式廣告中顯示的媒體上傳 iframe 不會指示新上傳將附加到的父帖子。但是 $_REQUEST
仍然在編輯視窗中處於活動狀態,並且仍然包含您正在編輯的專案的 post_id,因此只需查詢該 ID 的型別即可
您可以使用這種技術在各種鉤子和過濾器 – 我已經使用 intermediate_image_sizes
過濾器進行影像處理,但不是為了這個特殊的問題,但它應該在那裡工作嗎?
次佳解決方案
功能 wp_generate_attachment_metadata 中有一個 intermediate_image_sizes
過濾器。問題是,它沒有作為上下文的一部分傳遞的帖子型別。透過在媒體上傳彈出視窗中設定一個具有帖子型別值的瞬態功能,可以解決這個問題:
add_action( 'admin_head-media-upload-popup', 'define_post_type' );
function define_post_type() {
$referring_string = explode('?',$_SERVER['HTTP_REFERER']);
if ($referring_string[1]) parse_str( $referring_string[1] );
else $post_type = 'post';
set_transient('current_upload_parent_type',$post_type);
}
add_filter( 'intermediate_image_sizes_advanced',
'set_thumbnail_size_by_post_type', 10);
function set_thumbnail_size_by_post_type( $sizes ) {
$post_type = get_transient( 'current_upload_parent_type' );
delete_transient( 'current_upload_parent_type' );
switch ($post_type) :
case 'type_A' :
$sizes['post-thumbnail'] = array(
'width' => 298, 'height' => 167, 'crop' => true);
break;
default :
$sizes['post-thumbnail'] = array(
'width' => 192, 'height' => 108, 'crop' => true);
break;
endswitch;
return $sizes;
}
我認為這應該是訣竅,雖然這可能是一個更優雅的方式,而不是設定一個瞬態 (和它是,它不是防彈的 – 兩個同時的影像上傳有風險,讓他們的帖子型別交叉,影像上傳透過」New Media」 面板可以從 post screen 上傳的最後一個影像繼承 post 型別。
也許有人可以改善這個?
編輯:
我知道必須有一個更好的方法來做到這一點。忽略掛在 admin_head-media-upload-popup
上的功能,並按照 @somatic 的答案檢查帖子型別。您仍然可以根據 intermediate_image_sizes_advanced
中的帖子型別設定 post-thumbnail 大小。
第三種解決方案
我混合了 Somatic 和 Goldenapples 的想法 (謝謝你們),以下方式。它的作用就像一個魅力,實現起來很簡單。
它應該寫在 functions.php 中
/* Adding image sizes*/
add_filter( 'intermediate_image_sizes_advanced','set_thumbnail_size_by_post_type', 10);
function set_thumbnail_size_by_post_type( $sizes ) {
$post_type = get_post_type($_REQUEST['post_id']);
switch ($post_type) :
case 'service' :
$sizes['service'] = array(
'width' => 250,
'height' => 155,
'crop' => true
);
break;
case 'post' :
$sizes['post'] = array(
'width' => 250,
'height' => 210,
'crop' => true
);
break;
default :
$sizes['default'] = array(
'width' => 200,
'height' => 200,
'crop' => true
);
endswitch;
return $sizes;
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。