web-dev-qa-db-ja.com

Pagesのブレッドクラムとしてのナメクジ

The Loopの外側にPageスラッグのブレッドクラムトレイルを作成する関数を作成しようとしています。これらのブレッドクラムには、ホームページから現在の(サブ)ページへのパスが表示されます。

たとえば、 "example.com/attraction/parcs/parc-name"ページでは、このブレッドクラムは次のように表示されます。ホーム>アトラクション>パークス>パーク名

私は多くの研究をして、その機能の一部を実行することができる様々なコードスニペットを見つけました、しかし私のPHPスキルは私自身全体の機能を作成するのに十分ではありません。

これは私が持っているものです:

  • The Loopでポストスラグを入手してください:$slug = basename(get_permalink());src
  • The Loopの外にスラグを追加しましょう:global $post; echo $post->post_name;(src:上記参照)
  • 投稿の親スラッグを取得する<?php global $post; if($post->post_parent) { $post_data = get_post($post->post_parent); echo $post_data->post_name; } ?>src
  • ページタイトルを使用してページのブレッドクラムトレイルを取得します(これが現在使用しているものです)。

    if ( is_page() ) 
    {
      $post = $wp_query->get_queried_object();
      if ( $post->post_parent == 0 )
      { 
        echo "<li> &raquo; ".the_title('','', FALSE)."</li>"; 
      } 
      else 
      {
        $title = the_title('','', FALSE);
        $ancestors = array_reverse( get_post_ancestors( $post->ID ) );
        array_Push($ancestors, $post->ID);
        foreach ( $ancestors as $ancestor )
        {
          if( $ancestor != end($ancestors) )
          {
            echo '<li> &raquo; <a href="'. get_permalink($ancestor) .'">'. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</a></li>';
          } 
          else 
          {
            echo '<li> &raquo; '. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</li>';
          }
        }
      }
    }
    

すべてのアイデア、提案、解決策は大歓迎です:)

3
Mattvic

わかりました、問題は解決しました。以下にスクリプトを追加します。誰かに役立つことを願っています。

if ( is_page() ) {
            $post = $wp_query->get_queried_object();
            if ( $post->post_parent == 0 ){ echo "<li> &raquo; ".ucwords(str_replace("-", " ", $post->post_name))."</li>"; } 
            else {
                $title = the_title('','', FALSE);
                $ancestors = array_reverse( get_post_ancestors( $post->ID ) );
                array_Push($ancestors, $post->ID);

                foreach ( $ancestors as $ancestor ){
                    if( $ancestor != end($ancestors) ){
                        echo '<li> &raquo; <a href="'. get_permalink($ancestor) .'">'. ucwords(str_replace("-", " ", basename(get_permalink($ancestor)))) .'</a></li>';
                    } else {
                        echo '<li> &raquo; '. ucwords(str_replace("-", " ", basename(get_permalink($ancestor)))) .'</li>';
                    }
                }
            }
} // You just missed this bracket, else this is working awesome! 
3
Mattvic