0

オンラインで見つけて必要に応じて編集したこれら2つの機能があります。
私がやろうとしているのは、ワードプレスの投稿のサムネイルを、関数自体の画像内で以前に設定されたデフォルト、または投稿に埋め込まれた最初の画像のいずれかに設定することです。
しかし、どこかで何かがうまくいかなかった...

wptuts_save_thumbnail($post_id) - > 投稿のサムネイルをデフォルトに設定するか、まだ設定されていない場合は最初の画像に設定します(投稿の作成者によって...)!

function wptuts_save_thumbnail( $post_id ) {
$post_thumbnail = get_post_meta( $post_id, '_thumbnail_id', true );

if (!wp_is_post_revision($post_id)) { // Verify that the post is not a revision
    if (empty($post_thumbnail)) {       // Check if Thumbnail does NOT exist!
        $firstImg = firstImg($post_id); // Get the first image of a post (if available)
        if(!$firstImg){ // if available, update the post thumbnail
            update_post_meta( $post_id, '_thumbnail_id', 'link to default image here' );
        } else { // else -> set thumbnail to default thumbnail
            update_post_meta( $post_id, '_thumbnail_id', $firstImg );
        }
    }
}
}

firstImg($post _id) -> 投稿の最初の画像を取得するために使用されます (ID による)

function firstImg($post_id) {
  $post = get_post($post_id);
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches[1][0];

  $urlLength = strlen(site_url());
  $first_img = substr($first_img, $urlLength);

  if(empty($first_img)){
    return false;
  }

  return $first_img;
}

これらの関数の唯一の問題は、if(!$firstImg) - elseステートメントにあります。
画像は、投稿に画像が埋め込まれているかどうかにかかわらず、常にデフォルトに設定されます。
$firstImg実際、最初の画像が存在する場合はそれを返すため、問題は 2ifのいずれかにある必要があります: if(empty($first_img))OR if(!$firstImg).
問題の手がかりを探してみましたが、何も見つかりませんでした。

うまくいけば、誰かがこの問題に光を当てることができます:)
事前に感謝します!

追加情報:
- 両方の機能がfunctions.php私のテーマに書かれています。
-新しい投稿が公開さwptuts_save_thumbnail($post_id)れるたびに実行するように設定されています。 - 返される場合は、画像の相対パス(つまり、/wp-contents/uploads/img.jpg)、または.
$first_imgfalse

4

1 に答える 1

2

コードを見て指摘できることは、firstImg のチェックです。

if(!$firstImg){ // if available, update the post thumbnail
  update_post_meta( $post_id, '_thumbnail_id', 'link to default image here' );
} else { // else -> set thumbnail to default thumbnail
  update_post_meta( $post_id, '_thumbnail_id', $firstImg );
}

false を返すようで、デフォルトの画像が表示されます。

あなたができることは、ダンプの $matches[1][0] または firstImg 関数の print_r の結果を確認することです。また、返す前に $first_img が何であるかを確認してください。$first_img で期待どおりの結果が得られていないように見えるため、これは答えを見つけるのに役立ちます。

それが役立つことを願っています。

于 2012-12-05T13:47:17.783 に答える