我们怎么能强迫has_post_thumbnails()
返回false
?
方法#1-禁用主题支持:
您可以通过
function twentythirteen_child_setup()
{
remove_theme_support( \'post-thumbnails\' );
}
add_action( \'after_setup_theme\', \'twentythirteen_child_setup\', 11 );
但请注意,这不会删除特色图像。
如果_thumbnail_id
post meta值非空,则has_post_thumbnails()
将返回true
. 因此,在这种情况下,我们还需要一些其他东西。
方法#2-修改数据库的脚本:
如果要取消附加特征图像,可以使用例如(未测试):
/**
* Un-attach all featured images:
*/
$pids = get_posts(
array(
\'post_type\' => array( \'post\', \'page\' ),
\'meta_key\' => \'_thumbnail_id\',
\'fields\' => \'ids\',
\'posts_per_page\' => 10 // modify this to your needs
)
);
foreach( $pids as $pid )
{
// Delete:
// delete_post_meta( $pid, \'_thumbnail_id\' );
// Debug:
printf( \' pid: %d <br/>\', $pid );
}
警告:请在尝试此代码段之前进行数据库备份。
方法#3-劫持过滤器:
如果我们寻找可用的过滤器,那么我们将沿着以下路径进行操作:
has_post_thumbnail()
呼叫get_post_thumbnail_id()
get_post_thumbnail_id()
呼叫get_post_meta()
get_post_meta()
呼叫get_metadata(\'post\', ... )
get_metadata()
包含get_{$meta_type}_metadata
滤器因此要使用的过滤器是get_post_metadata
滤器
要劫持筛选器返回的值,$check
必须满足:
! is_null( $check ) && false === (bool) $check
用于has_post_thumbnail()
返回false
.为了更好地理解这一标准,我们可以进行一些测试:
var_dump( ! is_null( 0 ) && false === (bool) 0 );
var_dump( ! is_null( false ) && false === (bool) false );
var_dump( ! is_null( null ) && false === (bool) null );
提供以下输出:bool(true)
bool(true)
bool(false)
这意味着我们可以构造以下代码段:/**
* Force has_post_thumbnail() to return false.
*/
! is_admin() && add_filter( \'get_post_metadata\',
function( $check, $object_id, $meta_key, $single )
{
// Hijack the meta data for featured images:
if ( \'_thumbnail_id\' === $meta_key )
{
$check = 0; // or false
}
return $check;
}
,10, 4 );
强制has_post_thumbnail()
返回false。您可以将此代码段放置在functions.php
文件或在自定义插件中使用它。
ps:看起来这几年前就已经解决了,比如这个thread.