2016-06-14 33 views
-1

WordPressで画像投稿形式を追加しようとしています。ユーザーが注目画像をアップロードするのではなく、画像を本文に追加する場合は、添付ファイルから最初の画像を取得し、それを上部ヘッダー画像として表示し、残りを記事本文に表示します。ここに私が思いついた機能があります。注目の画像がアップロードされている場合は動作しますが、そうでない場合は、投稿の本文にさえいない画像が取り込まれます。それはポストのIDを取得していないように見えます。私は何を間違えたのですか?助けてください。ここに私のコードは次のとおりです。WordPressの画像投稿とギャラリー投稿の問題

function justblog_get_attachment(){ 
if(has_post_thumbnail()) { 
    the_post_thumbnail('large', array('class' => 'blog-main-image')); 
} else { 
    // No post thumbnail, try attachments instead. 
    $attachments = get_children(array('post_parent' => $post->ID, 
             'post_type' => 'attachment', 
             'post_mime_type' => 'image', 
             'order' => 'DESC', 
             'orderby' => 'menu_order ID')); 

    foreach($attachments as $att_id => $attachment) { 
     $full_img_url = wp_get_attachment_image_src($attachment->ID, 'full', true); 
    } 
    if ($attachments) { 
     echo '<img src="' . esc_url($full_img_url[0]) . '" alt="Title Image" class="blog-main-image" />'; 
    } 
} 
wp_reset_postdata(); 
} 

答えて

0

あなたは、引数として関数にグローバルまたはパス$ポストを使用して$ポストを移入する必要があり、前者は

function justblog_get_attachment(){ 
    if(has_post_thumbnail()) { 
     the_post_thumbnail('large', array('class' => 'blog-main-image')); 
    } else { 
     // No post thumbnail, try attachments instead. 
     global $post; 
     $attachments = get_children(array('post_parent' => $post->ID, 
              'post_type' => 'attachment', 
              'post_mime_type' => 'image', 
              'order' => 'DESC', 
              'orderby' => 'menu_order ID')); 

     foreach($attachments as $att_id => $attachment) { 
      $full_img_url = wp_get_attachment_image_src($attachment->ID, 'full', true); 
     } 
     if ($attachments) { 
      echo '<img src="' . esc_url($full_img_url[0]) . '" alt="Title Image" class="blog-main-image" />'; 
     } 
    } 
    wp_reset_postdata(); 
} 

の下に示されているあなたは、この使用してCSSを試みる可能性があり、少しのPHP。基本的には、ヘッダーコードを変更して、ページの周りにあなたのボディやdivラッパーを追加するクラスを追加します。

次にあなたは、ポストコンテンツに第一画像をターゲットIMGは絶対にし、トップにそれを揃えることができ、このクラスを使用して
if (has_post_thumbnail($post->ID)){?> 

    <div class="post-body no-feat-img"> 

<?php } else { ?> 
    <div class="post-body"> 
<?php } 

ここにサンプルを表示https://jsfiddle.net/1pveo2wn/1/ - 画像の下には、クラスを切り替えるボタンがあります。これは理想的ではありませんが、その1つの方法です。もう1つは出力前に投稿コンテンツをフィルタリングし、画像をプルしておすすめ画像として表示することです。

フィルターのコードを実行しない理由の1つは、srcsetとwordpressを取得するのに最後の2日間を費やしていますか?the_post_thumbnail()共通の各画面タイプ(モバイルワイドスクリーンへ)。したがって、私はあなたがこれを放棄し、単に画像を使用し、ユーザーが特集画像を選択するのに失敗した場合は、その厳しいと思う。

+0

こんにちはDavid、私はあなたの修正を試み、空の配列を返します。私はWPループ内の関数を呼び出すので、ポストのIDを取得し、そこから添付ファイルをロードするだけです。投稿IDは大丈夫です!私はWPループ内のテンプレート部分を呼び出しています。どんなアイデアですか? –

+0

画像が投稿にどのように含まれているかを再確認する必要があります。それはポストの子供よりむしろポストメタであろう。 – David

+0

私は実際にはWordPressの新しい、まだ学習しています。私はWPがデフォルトの投稿に画像を追加する方法を変更しなかった(私はここにカスタム投稿を扱っていない)。画像はデフォルトで投稿の子ではないのですか?私はこれを3日間修正しようとしています。イメージをエコーすると、メディアライブラリ内のすべてのイメージがロードされます。いくつかの奇妙な理由から、 'get_the_ID()/ the_ID/$ post-> ID'に設定された 'post_parent'は気にしません。私はループ内にあります、それはちょうどループからポストIDを取る必要があります、その特定のポストからの画像を読み込み、ライブラリ全体ではありません。ここで私を助けてください。発狂。 –