• しろ

    (@kitaguni_ht)


    不動産プラグインを使用してサイトを作成しています。
    page-fudosan.phpという固定ページを作成し、カテゴリー毎に新着物件を3件ずつ表示させるページを作成しました。アイキャッチ画像がなければ「物件画像」の1枚目(fudoimg1)を表示させたいのですが、画像の取得が上手くいかずに困っています。

    <?php
    /**** functions ****/ //価格表示のためにシングル投稿機能読み込み
    require_once WP_PLUGIN_DIR . '/fudou/inc/inc-single-fudo.php';
    
    global $post;
    
    //タクソノミータームがある限り表示されるよう変更
    $terms = get_terms('bukken', 'hide_empty=0');
    $term_count = 0;
    if ( !empty( $terms ) ){
    	foreach ( $terms as $term ) {
    		//echo '>'.$term->name.'';
    		//var_dump($term);
    		//echo '>'.$term->slug.'';
    		$term_count++;		
    
    		$args = array(
    			'post_type' =>'fudo',
    			'post_status' =>'publish',
    			'orderby' => 'date',
    			'order' => 'desc',
    			'posts_per_page' => '3',
    			'tax_query'      => array(
    				array(
    					'taxonomy' => 'bukken',  // カスタムタクソノミー名
    					'field'    => 'slug',  // ターム名を term_id,slug,name のどれで指定するか
    					'terms'    => $term->slug // タクソノミーに属するターム名
    				)
    			)          
    		);
    		$posts = get_posts( $args );
    	//danmp
    	//var_dump($posts);
    
    	if($posts):			  
    	?>
    	<!-- ▼BEGIN fudo -->
    	<section class="section" id="fudo<?php echo ucfirst($term->slug); ?>">
    	<div class="inner">     
    
    	<!-- ============================== bukkenList ============================== -->
    	<div class="bukkenList cf">
    		<?php foreach($posts as $post): setup_postdata($post); ?>			 
    		<dl class="bukkenListItem">
    			<dt class="entryEyecatch">
          <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
          <?php if(has_post_thumbnail()): ?>
            <?php the_post_thumbnail('medium', array('class' => 'attachment-medium archive-eyecatch')); ?>
          <?php else: ?>
            <!--アイキャッチ画像の設定がなければ不動産プラグインの画像1を表示させたい -->
            <?php $fudoimg_data = get_post_meta(get_the_ID(), 'fudoimg1', true); ?>
            <img src="<?php echo 'wp-content/uploads/'.$fudoimg_data; ?>" alt="<?php the_title_attribute(); ?>" width="" height="">
          <?php endif; ?>
        	</a>
    			</dt>
    			<dd class="entryTitle">
    				~~省略~~
    			<dd>
    		</dl><?php //新着のみ表示する場合のみ使用 } ?><!-- /#post-## -->    
    		<?php endforeach; wp_reset_postdata(); ?>
    		</div>
    		<!-- ============================== /bukkenList ============================== -->
    	</div>
    	</section>
    	<!-- ▲END fudo -->
    	<?php endif; ?>
    <?php
    	}
    }
    //var_dump($terms[0]);
    ?>

    $fudoimg_dataだけでは画像名しか取得できず、年月フォルダの取得が出来ません。
    wp_get_attachment_image_srcやwp_get_attachment_urlでも試したのですが、画像URL自体取得することも出来ませんでした。
    画像のアップロードフォルダは年月別に保存されるようになっています。既にブログで大量の画像がアップロードされているので、アップロードフォルダを変えるわけにはいきません。

    <?php
    	$upload_dir = wp_upload_dir();
    	$upload_url = ( $upload_dir['url'] );
    ?>
    <?php $fudoimg_data = get_post_meta(get_the_ID(), 'fudoimg1', true); ?>
    <img src="<?php echo $upload_url. '/' .$fudoimg_data; ?>" alt="<?php the_title_attribute(); ?>" width="" height="">

    上記のコードも試してみたのですが、fudoimg1の$upload_dir[‘url’]ではなく、何か別の$upload_dir[‘url’]を取得してるようで違う年月フォルダのURLが表示されてしまいます。

    どうしたらfudoimg1の画像URLを取得できるか、どなたかアドバイスいただけませんでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    下記コード(get_attachmentid_by_filename 関数)で添付ファイルの名前から添付ファイルの ID を取得することができます。

    functions.php 等に

    function get_attachmentid_by_filename( $filename ) {
    	$attachment_id = $wpdb->get_var( $wpdb->prepare(
    		"SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND guid LIKE '%%%s' LIMIT 1;",
    		$filename
    	) );
    	return $attachment_id;
    }

    使用例

    $fudoimg1 = get_post_meta( $post_id, 'fudoimg1', true );
    $attachment_id = get_attachmentid_by_filename( $fudoimg1 );
    if ( $attachment_id ) {
    	echo wp_get_attachment_image( $attachment_id, 'full' );
    } else {
    	// 画像なし
    }
    トピック投稿者 しろ

    (@kitaguni_ht)

    >ishitakaさん

    返信ありがとうございます。早速試してみましたが、うまくいきませんでした。
    デバッグモードにしてみたところ、以下のようなエラーでした。

    Notice: Undefined variable: wpdb in /home/xxx/www/xxx/wp-content/themes/sampletheme2017/functions.php on line 202
    
    Fatal error: Call to a member function get_var() on null in /home/xxx/www/xxx/wp-content/themes/sampletheme2017/functions.php on line 202

    202行目というと、

    $attachment_id = $wpdb->get_var( $wpdb->prepare(

    の辺りになるのですが、何かわかりますでしょうか?

    おっと、失礼しました!

    global $wpdb; が抜けてました。

    function get_attachmentid_by_filename( $filename ) {
    	global $wpdb;	// <- 追加
    	$attachment_id = $wpdb->get_var( $wpdb->prepare(
    		"SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND guid LIKE '%%%s' LIMIT 1;",
    		$filename
    	) );
    	return $attachment_id;
    }
    トピック投稿者 しろ

    (@kitaguni_ht)

    >ishitakaさん

    返信ありがとうございます。
    無事に画像の取得ができました!
    get_the_ID()じゃないと上手く取得出来なかったので、一応コードを載せておきます。

    <?php
    $fudoimg1 = get_post_meta( get_the_ID(), 'fudoimg1', true );
    $attachment_id = get_attachmentid_by_filename( $fudoimg1 );
    echo wp_get_attachment_image( $attachment_id, 'medium' );
    ?>

    本当にありがとうございました!m(__)m

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「不動産プラグインの物件画像を固定ページに表示させたい」には新たに返信することはできません。