サポート » 使い方全般 » wp_list_pagesのdepthが効かなくなりました。。。

  • 解決済 plum0710

    (@plum0710)


    申し訳ありません。ご教授お願いします。

    サイトマップを自動生成したいのですが、カスタム投稿を使用していることと特定の固定ページをexcludeで指定したいためwp_list_pagesを使用しています。
    (function.phpで記述してショートコード化しています)

    固定ページは子固定ページまで自動で表示されて欲しいためdepthを設定していたところ、子ページがうまく表示されました。
    ただ、順序を変えたいなと思い、固定ページ一覧のクイック編集で順序を変更したところ、子固定ページが表示されなくなりました。
    全ての順序を0に戻しても表示されません。。。

    children_ofで親ページのIDを指定すると子ページはきちんと表示されるため、親子関係がくずれたとは考えづらいです。

    なにか思いつく解決方法があればご教授お願いします。

    また本質的にはサイトマップで以下の①~③を順番に行いたいだけですので、代替案があればぜひご教授お願いします。(今回の質問は①の部分)

    ①:固定ページを子ページまで自動取得・表示(excludeで特定のページは除外)
    ②:カスタム投稿を表示(3つあります。スラッグから名前とリンクを取得して表示させています。)
    ③:①で除外したページの表示(スラッグから名前とリンクを取得して表示させています。)

    ずっと困っているのでぜひお力添えをお願いします。。。

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

    (@gatespace)

    実際にどんなコードが書かれているか分からないので、誰も回答のしようがないですよ

    トピック投稿者 plum0710

    (@plum0710)

    なるほど。大変失礼いたしました。。。

    function simple_sitemap(){
      global $wpdb;
    	$sitemap_ID = strval( get_page_by_path('sitemap') -> ID );
    	$request_ID = strval( get_page_by_path('request') -> ID );
    	$exclude_ID = $sitemap_ID.",".$request_ID;
    	$args = array(
    		'depth'		=> 2,
    		'show_date'	=> '',
    		'date_format'	=> get_option('date_format'),
    		'exclude'		=> $exclude_ID,
    		'include'		=> NULL,
    		'child_of'	=> 0,
    		'title_li'	=> '',
    		'echo'		=> 1,
    		'authors'		=> NULL,
    		'sort_column'	=> 'menu_order, post_title',
    		'link_before'	=> NULL,
    		'link_after'	=> NULL,
    		'exclude_tree'	=> NULL ); 
    
    	echo '<div id="sitemap"><ul>';
    		wp_list_pages($args);
    	echo '</ul>';
    
     add_shortcode('sitemap', 'simple_sitemap');

    以上のようなコードを書いています。
    よろしくお願いします!

    こんにちは、

    関数が閉じていませんが、書き忘れですか?

    動作は確認していませんが、ショートコードは、特別な事がなければ、return させるものではないかと思います。

    トピック投稿者 plum0710

    (@plum0710)

    >>nobitaさん

    申し訳ありません。
    問題のある部分を抜粋していたので書き忘れです。。。

    下記のようになっております!

    function simple_sitemap(){
      global $wpdb;
    	$sitemap_ID = strval( get_page_by_path('sitemap') -> ID );
    	$request_ID = strval( get_page_by_path('request') -> ID );
    	$exclude_ID = $sitemap_ID.",".$request_ID;
    	$args = array(
    		'depth'		=> 2,
    		'show_date'	=> '',
    		'date_format'	=> get_option('date_format'),
    		'exclude'		=> $exclude_ID,
    		'include'		=> NULL,
    		'child_of'	=> 0,
    		'title_li'	=> '',
    		'echo'		=> 1,
    		'authors'		=> NULL,
    		'sort_column'	=> 'menu_order, post_title',
    		'link_before'	=> NULL,
    		'link_after'	=> NULL,
    		'exclude_tree'	=> NULL ); 
    
    	echo '<div id="sitemap"><ul>';
    		wp_list_pages($args);
    	echo '</ul>';
    
    //カスタム投稿用
    //	スラッグからカスタム投稿名をを取得
    	$blog_title	= get_post_type_object('blog')	-> labels -> name;
    	$result_title	= get_post_type_object('result')-> labels -> name;
    	$voice_title	= get_post_type_object('voice')	-> labels -> name;
    //	スラッグからアーカイブ用のリンクを取得しつつaタグを作成
    	$blog_link	= "<a href=".get_post_type_archive_link( 'blog' ).">".$blog_title."</a>";
    	$result_link	= "<a href=".get_post_type_archive_link( 'result' ).">".$result_title."</a>";
    	$voice_link	= "<a href=".get_post_type_archive_link( 'voice' ).">".$voice_title."</a>";
    	echo '<ul><li>';
    	echo $blog_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
     	echo $result_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
    	echo $voice_link;
    	echo '</li></ul>';
    
    //サイトマップ・お問い合わせ用(IDからリンクを取得・スラッグからページのタイトルを取得)
    //	スラッグから固定ページ名を取得
    	$request_title = get_page_by_path('request') -> post_title;
    	$sitemap_title = get_page_by_path('sitemap') -> post_title;
    //	スラッグから取得したIDからリンクを取得しつつaタグを作成
    	$request_link = "<a href=".get_category_link( $request_ID ).">".$request_title."</a>";
    	$sitemap_link = "<a href=".get_category_link( $sitemap_ID ).">".$sitemap_title."</a>";
    	echo '<ul><li>';
    	echo $request_link;
    	echo '</li></ul>';
    	echo '<ul><li>';
     	echo $sitemap_link;
    	echo '</li></ul>';
    
    	echo '</div>';
    }
     add_shortcode('sitemap', 'simple_sitemap');

    汚くて申し訳ありませんが、よろしくお願いします。

    一般的には、以下のようになるのではないかと思います。

    function simple_sitemap(){
      global $wpdb;
    	/* 省略、strval() 必要なんですか?
    	$sitemap_ID = strval( get_page_by_path('sitemap') -> ID );
    	$request_ID = strval( get_page_by_path('request') -> ID );
    	$exclude_ID = $sitemap_ID.",".$request_ID;*/
    
    	$exclude_ID = "";
    	$args = array(
    		'depth'		=> 3,
    		'show_date'	=> true,
    		'date_format'	=> get_option('date_format'),
    		'exclude'		=> $exclude_ID,
    		//'include'		=> NULL, 
    		//'child_of'	=> 0,
    		'title_li'	=> '',
    		'echo'		=> 0,
    		//'authors'		=> NULL,
    		//'sort_column'	=> 'menu_order, post_title', デフォルトと同じなのでいりません
    		//'link_before'	=> NULL,
    		//'link_after'	=> NULL,
    		//'exclude_tree'	=> NULL ないですよね
    		); 
    
    	/* ショートコードは、return
    
    	echo '<div id="sitemap"><ul>';
    		wp_list_pages($args);
    	echo '</ul>';
    
    	*/
    	/* wp_list_pagesは、echoしないで return */
    	return sprintf( '<div id="sitemap"><ul>%1$s</ul></div>',wp_list_pages($args) );
    }
     add_shortcode('sitemap', 'simple_sitemap');
    トピック投稿者 plum0710

    (@plum0710)

    ありがとうございます。上記コードで上手くいきました!
    どうやらwp_list_pageのechoが良くなかったようです。

    本当にありがとうございます!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「wp_list_pagesのdepthが効かなくなりました。。。」には新たに返信することはできません。