• ショートコードに関する知識が全くなかったため、
    Exec-PHPを使って小手先でページを作っていましたが、
    もっときれいにページが作りたいという気持ちと、
    Exec-PHPでは限界を迎えたこと、他の方からのご指摘もあり、
    素人ながらにgoogle先生にお世話になりながらショートコードを作成しています。

    色々と変えたいところはたくさんあるのですが、
    手始めに参考になりそうなページが見つかった個所を変更してみました。

    【変更前/Exec-PHPを使って固定ページに入れていました。】

    <?php $news_ob = new wp_query(array('category_name'=>'blog_name', 'posts_per_page'=>10, 'post_status'=>'publish')); ?>
      <?php if ($news_ob->have_posts()) : while ($news_ob->have_posts()) : $news_ob->the_post(); usces_the_item(); ?>
      【更新日】 <?php the_time('Y年n月j日'); ?>&rArr;<a href="<?php the_permalink() ?>" rel="bookmark"><?php the_Title(); ?></a><br />
      <?php the_excerpt(); ?>
      <?php endwhile; else: ?>
      <?php _e('Sorry, no posts matched your criteria.'); ?>
      <?php endif; wp_reset_query(); ?>
    <a href=""><img src="バナー" border="0" /></a>

    【変更後/function.phpに入れました。】

    function getCatItems($atts, $content = null) {
    	extract(shortcode_atts(array(
    		"num" => '5',
    		"cat" => ''
    	), $atts));
    	global $post;
    	$oldpost = $post;
    	$myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
    	$retHtml='<ul>';
    	foreach($myposts as $post) :
    		setup_postdata($post);
    		$retHtml.='<li>【更新日】'.get_post_time('Y-m-d').'<br />【タイトル】<a href="'.get_permalink().'">'.the_title("","",false).'</a><br /></li>';
    	endforeach;
    	$retHtml.='</ul><p>&nbsp;</p><a href=""><img src="バナー" border="0" /></a>
    ';
    	$post = $oldpost;
    	return $retHtml;
    }
    add_shortcode("list", "getCatItems");

    他の方のページに書かれていたものを少しアレンジしただけなので、
    はっきり言って細かい部分に関しては、現時点ではほとんど理解できていません。

    なので、

    <?php _e('Sorry, no posts matched your criteria.'); ?>

    を表示させたいのに、
    どこにどうやって入れればいいのか分からず、3時間ほど悩み続けています。

    google先生に聞いてはいるものの、
    調べ方すら分からないので希望通りの回答は出ず…

    理解できていない私が厚かましくも皆様のお知恵をお借りするのも失礼かと思いましたが、
    良い解決策がございましたらご教授のほどよろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    jkpe2さん、こんにちは

    ショートコード推進派(?)の私としては、うれしい限りです。
    ショートコードでは、出力は行わずにHTMLのソースコードを変数内に組み立てて、最終的に return する必要があります。

    で、アドバイスとしては、

    if ( $myposts ) :

    で記事の有無を判別できます。

    <?php _e('Sorry, no posts matched your criteria.'); ?>

    の_eは、翻訳して出力する関数です。翻訳して値として取得する場合は、__ (アンダーバー2つ)ですが、翻訳の必要がなければ、表示したい文字列そのままで構いません。

    $oldpost と一旦 $post を退避させていますが、endforeach のあとで、 wp_reset_postdata を行った方がよりよいです。

    トピック投稿者 jkpe2

    (@jkpe2)

    jim912様

    おはようございます。
    早速のアドバイスありがとうございます!

    素人なので時間がかかるかもしれませんが、
    頂いた内容で作り直してみます!

    また完成したら更新します。

    ありがとうございました★

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「Exec-PHPをやめて、ショートコードにしているのですが…」には新たに返信することはできません。