禁用《二十三子主题》中的帖子缩略图

时间:2014-08-09 作者:Phil Gyford

我做了一个主题,是标准的213主题的孩子。二十三个显示器post_thumbnail 我希望我的主题不要这样做。

我可以为所有使用它的模板创建自己的版本(如page.php, content.php) 但这似乎是小题大做了。

我试过了remove_theme_suport(\'post-thumbnail\') 但这没有任何效果。

我试着删除add_theme_support(\'post-thumbnail\') 十三号线functions.php, 但这没有任何效果。

我可以使用CSS隐藏缩略图,但图像仍在加载中,我希望HTML完全不包含在内。

我不想浏览大量的现有帖子/页面,删除我多年前设置的所有缩略图。

有什么想法吗?是否可以覆盖has_post_thumbnail() 所以它总是回来FALSE?

注意:这与网站标题栏中的“标题”图像不同,但显示在页面主要内容的主导航下方。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我们怎么能强迫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.

结束

相关推荐

禁用《二十三子主题》中的帖子缩略图 - 小码农CODE - 行之有效找到问题解决它

禁用《二十三子主题》中的帖子缩略图

时间:2014-08-09 作者:Phil Gyford

我做了一个主题,是标准的213主题的孩子。二十三个显示器post_thumbnail 我希望我的主题不要这样做。

我可以为所有使用它的模板创建自己的版本(如page.php, content.php) 但这似乎是小题大做了。

我试过了remove_theme_suport(\'post-thumbnail\') 但这没有任何效果。

我试着删除add_theme_support(\'post-thumbnail\') 十三号线functions.php, 但这没有任何效果。

我可以使用CSS隐藏缩略图,但图像仍在加载中,我希望HTML完全不包含在内。

我不想浏览大量的现有帖子/页面,删除我多年前设置的所有缩略图。

有什么想法吗?是否可以覆盖has_post_thumbnail() 所以它总是回来FALSE?

注意:这与网站标题栏中的“标题”图像不同,但显示在页面主要内容的主导航下方。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我们怎么能强迫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.

相关推荐