サポート » プラグイン » WP-PageNaviのphpコードをfunctions.phpに書くには

  • この様なコードでカスタム投稿タイプの記事一覧を表示しています。

    function getCatsample($atts, $content = null) {
    	extract(
    	shortcode_atts(array(
    		"num" => '0'
    	), $atts));
    	global $post;
    	$oldpost = $post;
    	$myposts = get_posts('numberposts='.$num.'&post_type=committee&order=DESC&orderby=post_date&tag=other');
    	$retHtml='<dl class="dl_archive">';
    	foreach($myposts as $post) :
    		setup_postdata($post);
    		$retHtml.='<dt>'.get_post_time('Y年m月d日').'</dt>';
    		$retHtml.='<dd><a href="'.get_permalink().'">'.the_title("","",false).'</a></dd>';
    	endforeach;
    	$retHtml.='</dl>';
    	restore_current_blog();
    	$post = $oldpost;
    	return $retHtml;
    }
    add_shortcode("sample", "getCatsample");

    この中にプラグインのページナビを呼び出すコードの
    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
    を記入したいのですが、どの様に記入すれば良いのでしょうか。

    どなたかどうか教えて下さい。

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

    (@jim912)

    piyokoさん、こんにちは

    wp_pagenavi関数は関数内でページナビを出力してしまうため、そのまま記述するとショートコード記述部ではなく上部に表示されています。また、パラメーターで出力を止めることも出来ない仕様になっています。

    このような場合は、出力制御関数を使って、出力せずに変数として取得することで対応可能です。

    if(function_exists('wp_pagenavi')) {
    	ob_start();
    	wp_pagenavi();
    	$retHtml.= ob_get_clean();
    }

    ※ get_postsでは、wp_pagenaviは使えません。query_postsを使うか、WP_Queryを使い、wp_pagenaviのqueryパラメーターを指定してください。

    トピック投稿者 Chiharu Ebisugawa

    (@piyoko)

    jim912さん、ご回答を下さりありがとうございます!!
    おかげでしっかりと実装する事が出来ました!!
    wp_pagenaviの関数についても解り易いご説明を頂き、ありがとうございます。

    get_postsではダメだったのですね。
    まったく気付かず何時間も悩んでしまいました。
    今後こうして条件を指定する時は気をつけたいと思います。

    一覧を取得するページは固定ページで作っていたので、
    最終的には以下のコードでバッチリ動きました。

    function getCatgetCatsample($atts, $content = null) {
    	global $post;
    	$oldpost = $post;
    	$myposts = query_posts('posts_per_page=15&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日').'</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("sample", "getCatsample");

    これで安心して次に進めます。
    お世話になりました!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「WP-PageNaviのphpコードをfunctions.phpに書くには」には新たに返信することはできません。