当没有图片的新帖子发布时,将特定图片保存为特色图片(按类别)

时间:2021-04-01 作者:shinny0129

作为标题,我想在新发布的时候,将带有特定图像的帖子保存为特色图像。此外,我想保存不同的图像,这是按类别过滤。

我已经写了下面的代码,它并没有按我所希望的那样工作。

add_action(\'save_post\', \'wp_force_featured_image\', 20, 2);

function wp_force_featured_image($post_id, $post) {

    if( $post->post_type == \'post\' && $post->post_status == \'publish\' ) {
    
        if(!isset($_POST[\'_thumbnail_id\'])) {       
            $categories = get_the_category( $post->slug );  
             if ( $categories = \'news\' ) {      
              add_post_meta( $post_id, \'_thumbnail_id\', \'3135\' );
             }
             elseif  ($categories = \'bi\' ) {
              add_post_meta( $post_id, \'_thumbnail_id\', \'3138\' );
             }
        }
        }
    }
我试着拿类别slug进行比较。

任何建议都会对我有很大帮助。

提前感谢您的支持。

2 个回复
SO网友:JeFF - JXG

你的条件有问题。

get_the_category() 返回object, 使用foreach查找特定类别。

此外,您还为$categories 变量,要进行比较,必须使用comparison operators (例如:==或==)

我重构了代码,并根据您的情况进行了调整,希望能有所帮助。

add_action( \'save_post\', \'wp_force_featured_image\', 10, 3 );

function wp_force_featured_image( $post_id, $post, $update ) {
    if ( $update ) {
        return;
    }

    if ( $post->post_type !== \'post\' ) {
        return;
    }

    if ( $post->post_status !== \'publish\' ) {
        return;
    }

    $has_post_thumbnail = get_post_thumbnail_id( $post_id );

    if ( ! empty( $has_post_thumbnail ) ) {
        return;
    }

    $categories = get_the_category( $post_id );

    $thumbnail_id = false;
    
    foreach ( $categories as $category ) {
        if ( $category->slug === \'news\' ) {
            $thumbnail_id = 3135;
            break;
        }

        if ( $category->slug === \'bi\' ) {
            $thumbnail_id = 3138;
            break;
        }
    }

    if( $thumbnail_id ) {
      add_post_meta( $post_id, \'_thumbnail_id\', $thumbnail_id, true );
    }
}

SO网友:drdogbot7

如果您正在构建一个自定义主题,并且只想拥有一些备用图像,那么更简单的方法可能是在模板中执行以下操作:

<?php
if (has_post_thumbnail()) {
  the_post_thumbnail();
} else if (in_category(\'news\') {
  echo wp_get_attachment_image(\'3135\');
} else if (in_category(\'bi\') {
  echo wp_get_attachment_image(\'3138\');
}

?>
这可能是一个解决方案,也可能不是,这取决于您试图做什么。

相关推荐

Fix hover images blink

我使用php生成了这个css脚本,它用于在用户悬停时显示wordpress的第二个特色图像。问题是图像在闪烁,我不知道如何解决这个小问题。有人能建议解决这个问题吗?我已经实现了lazyload,但在这种情况下它是无用的。<div class=\"box\"> <?php $id = get_the_ID(); ?> <div class=\"rounded-circle\" style=\"background-image:url(\'