• functions.phpにコードを書いてショートコードで読み出し、
    日付の右側にNewアイコンが表示されるdlリストを作成しようとしているのですが、
    <dl>要素の上にNewアイコンが表示されてしまい困っております。

    理想の形はこうなのですが、

    <dl>
    <dt>日付[Newアイコン]</dt/>
    <dd>タイトル</dd>
    </dl>

    実際にはこうなってしまいます。

    [Newアイコン]
    <dl>
    <dt>日付</dt/>
    <dd>タイトル</dd>
    </dl>

    複数記事にNewが付く時はこうなってしまう始末です。

    [Newアイコン][Newアイコン]
    <dl>
    <dt>日付</dt/>
    <dd>タイトル</dd>
    <dt>日付</dt/>
    <dd>タイトル</dd>
    </dl>

    下記のコードが実際に書いているコードなのですが、
    どなたかおかしな部分を教えて頂けませんでしょうか。
    どうぞ宜しくお願いします。

    function gettopics($atts, $content = null) {
    	global $post;
    	$oldpost = $post;
    	$myposts = query_posts('posts_per_page=20&post_type=topics&order=DESC&orderby=post_date&paged='.get_query_var('paged').'');
    	if(have_posts()):
    	while ( have_posts() ) : the_post();
    	$retHtml='<dl class="dl_archive">';
    	foreach($myposts as $post) :
    		setup_postdata($post);
    
    		$retHtml.='<dt>'.get_post_time('Y/m/d').$days=14;$today=date('U'); $entry=get_the_time('U');$diff1=date('U',($today - $entry))/86400;
    if ($days > $diff1) {echo "\n" . '<img src="/wp-content/themes/common/images/common/new.gif' . '" />' . "\n";}
    		$retHtml.='</dt>';
    
    		$retHtml.='<dd><a href="'.get_permalink().'">'.the_title("","",false).'</a></dd>';
    
    	endforeach;
    	$retHtml.='</dl>';
    
    	if(function_exists('wp_pagenavi')) {
    	ob_start();
    	wp_pagenavi();
    	$retHtml.= ob_get_clean();
    }
    	wp_reset_query();
    	$post = $oldpost;
    	return $retHtml;
    	endwhile;
    	endif;
    }
    add_shortcode("topic", "gettopics");
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター gatespace

    (@gatespace)

    return $retHtml;
    最終的に returnで返しているに、途中でechoしちゃってるからじゃないですか?

    if ($days > $diff1) {echo "\n" . '<img src="/wp-content/themes/common/images/common/new.gif' . '" />' . "\n";}
    トピック投稿者 Chiharu Ebisugawa

    (@piyoko)

    gatespaceさん
    アドバイスをありがとうございます。
    returnで返しているのにechoでも返しているから飛びだしてしまうのでしょうか。
    echoを使わずに画像を出力する方法を考えてみたのですが、
    よく分からない状態です。

    echoを削除するだけだと画像を書き出しませんよね・・・。

    あと、良く見直すと日付の横に14日でNewマークを消す為の
    $days=14
    に指定した数字が表示されていて、
    2013/01/1514
    と日付が表示されてしまっていたので、下記の様に書き換えました。

    function gettopics($atts, $content = null) {
    	global $post;
    	$oldpost = $post;
    	$myposts = query_posts('posts_per_page=20&post_type=topics&order=DESC&orderby=post_date&paged='.get_query_var('paged').'');
    	if(have_posts()):
    	while ( have_posts() ) : the_post();
    	$retHtml='<dl class="dl_archive">';
    	foreach($myposts as $post) :
    		setup_postdata($post);
    
    		$retHtml.='<dt>'.get_post_time('Y/m/d');
    		$days=14;$today=date('U'); $entry=get_the_time('U');$diff1=date('U',($today - $entry))/86400;
    if ($days > $diff1) {echo "\n" . '<img src="/wp-content/themes/common/images/common/new.gif' . '" />' . "\n";}
    		$retHtml.='</dt>';
    
    		$retHtml.='<dd><a href="'.get_permalink().'">'.the_title("","",false).'</a></dd>';
    
    	endforeach;
    	$retHtml.='</dl>';
    
    	if(function_exists('wp_pagenavi')) {
    	ob_start();
    	wp_pagenavi();
    	$retHtml.= ob_get_clean();
    }
    	wp_reset_query();
    	$post = $oldpost;
    	return $retHtml;
    	endwhile;
    	endif;
    }
    add_shortcode("topic", "gettopics");

    物知らずでお恥ずかしいです。
    Newマークが日付の隣に来る様にする方法を、もう少し詳しく教えて頂けると嬉しいです。
    どうぞ宜しくお願いします。

    モデレーター gatespace

    (@gatespace)

    他の所で

    $retHtml.='<dt>'.get_post_time('Y/m/d');

    と書いているのだから、
    同じように echo ではなく$retHtml.=を使えば良いのでは?
    ※未検証

    if ($days > $diff1) {$retHtml.= "\n" . '<img src="/wp-content/themes/common/images/common/new.gif' . '" />' . "\n";}

    トピック投稿者 Chiharu Ebisugawa

    (@piyoko)

    gatespaceさん

    解決しました!
    Newのアイコンがしっかりと日付の右となりに表示されるようになりました!
    察しが悪くお手数をおかけしてしまい、申し訳ありませんでした。
    ありがとうございます。
    変数をちゃんと理解しておりませんでした。
    本当にありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「Newアイコンの表示位置がリストからはみ出します」には新たに返信することはできません。