サポート » 使い方全般 » moreタグ部分にコンテンツを挿入

  • 解決済 gellgugu

    (@gellgugu)


    度々お世話になります。

    moreタグを使用し、一覧ページにはmoreタグ以前の記事を表示するようにしていますが、それぞれの記事ページのmoreタグ部分にカスタムメニューを挿入したいと思っています。
    プラグインで、moreタグ部分に広告を挿入する様なものがあるとの事ですが、広告の代わりにカスタムメニューを挿入したいのですが可能でしょうか?

    お分かりの方、よろしくお願いいたします。

11件の返信を表示中 - 16 - 26件目 (全26件中)
  • トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ありがとうございます。
    gatespaseさんのコードの訂正ありがとうございます。

    こちらはおっしゃる通り$more = false;の追加で思い通りのものが出来ました。

    こちらとは別にnobitaさんが記載していただきましたコードの方も必要なのですが、全ての固定ページに適用されてしまう部分のところが解決出来ていません。
    is_page()の中に親ページのIDを入れれば親ページには挿入されますが、その子ページには挿入されません。
    is_page()に親ページのIDを指定し、更にその子ページもという条件分岐がうまく行かないのですがお分かりでしょうか?

    モデレーター gatespace

    (@gatespace)

    nobitaさんのコードの function my_more_content の中身を書き換えればOK。
    ただしの私のコードはその場で出力しているので、すべて return で返すように変更が必要。
    ※未検証です。

    add_filter( 'the_content','my_more_content');
    function my_more_content( $content ){
        if( is_page() and preg_match( '!<span id="more-[0-9]+"></span>!',$content, $regs ) ){
            // ここの中身を書き換え
            $html = "";
            global $post;
            $page = $post->ID;
            if ($post->post_parent) {
                $page = $post->post_parent;
            }
    
            $args = array(
                'post_type' => 'page',
                'post_parent'=> $page,
                'posts_per_page' => -1,
                'orderby' => 'menu_order',
                'order' => 'ASC',
            );
    
            $myposts = get_posts( $args );
            foreach ( $myposts as $post ) :
                setup_postdata( $post ); $more = false;
                $html .= '<h1><a href="' . get_permalink( get_the_ID() ) . '">' . the_title( '', '', false ) . '</a></h1>';
                $html .= '<div>' . apply_filters( 'the_content', get_the_content( 'Read more...' ) ) . '</div>';
            endforeach;
            wp_reset_postdata();
    
            $content = str_replace( $regs[0],$regs[0].$html, $content );
    
        }
    
        return $content;
    }

    is_page()の中に親ページのIDを入れれば親ページには挿入されますが、その子ページには挿入されません。
    is_page()に親ページのIDを指定し、更にその子ページもという条件分岐がうまく行かないのですがお分かりでしょうか?

    なんか、みょうにハードルがあがっている感があるんですが、気のせいですか?

    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/is_page

    is_page(array(42,'about-me','Contact'));
    // ID 42か、post_nameが"about-me"か、post_titleが"Contact"の場合にtrueを返します。
    トピック投稿者 gellgugu

    (@gellgugu)

    gatespaceさん、ありがとうございます。
    その記述ですと、カスタムメニューを表示するものでは無くなってしまっている気がします。
    タイトルとmoreタグ以前の記事の表示になるかと思います。

    nobitaさんが提示していただいたものはあくまでカスタムメニューをmoreタグ部分に表示するもので、これはこれでやはり利用したいなと思います。
    将来、メニューの追加をする際に子ページ以外のカスタムリンクを挿入する事も考えられますので。

    nobitaさん、ありがとうございます。
    その方法は少し前にも検証したのですが、IDとpost_nameとpost_titleでは今回の子ページを条件に指定する事は出来ないのではないかと思い断念したところです。

    例えばすべてのIDを記載すれば可能ですが、それだとやはり受け渡し先の方への説明が必要になってきます。
    「ID”7″とその子ページ」という条件分岐が出来ればと思うのですが。

    断念とは残念ですね

    IDの配列は、手書きしなければいけないとは、書いていないと思いますので、私なら、固定ページのIDリストを取得するコードを書いてみようと思いますが、( このやり方が、よいやり方かどうかは、実際に検証を重ねないといけませんけど )

    トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ありがとうございます。
    「固定ページのIDリストを取得する」を参考に試行錯誤してみましたが、指定した親ページの子ページにのみなら

    if( is_page() and

    の部分を

    if( in_array(7, get_post_ancestors( $post->ID ) ) and
    //ID7の子ページならtrueを返す

    にする事で出来ました。

    親ページも子ページもという事はやはり分かりませんでした。
    ただし、elseifでis_page(“7”) and 〜を付け足せばできましたが、冗長すぎるというかプログラムとしておかしい気がします。

    親ページとその子ページのIDを取得する良い方法があればお願いいたします。

    モデレーター gatespace

    (@gatespace)

    親ページとその子ページのIDを取得する良い方法があればお願いいたします。

    Codexの条件分岐タグのページにサンプルが載ってます。
    http://wpdocs.sourceforge.jp/%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%82%BF%E3%82%B0

    モデレーター gatespace

    (@gatespace)

    ただ、

    ただ、このget_postsで取得した一覧をmoreタグ部分に表示となるとより複雑なコードになりませんか?
    それが出来るならカスタムメニューをいじる手間も無くなるので一番良いと思います。

    というレスがあったのでこういう風にできますよと言う意味で投稿したのに

    将来、メニューの追加をする際に子ページ以外のカスタムリンクを挿入する事も考えられますので。

    と言われるのは残念です。

    「上手く説明できない」というのはしょうがないのですが、どうもやりたいことが二転三転しているように見えてなりません。

    カスタムメニューを使う方法も、子ページの一覧を自動で取得する方法も、いくつか出ている訳ですから後はご自分でやりたいようにやってみてはどうですか?

    トピック投稿者 gellgugu

    (@gellgugu)

    gatespaceさん、すみませんでした。

    確かにやりたい事が2転3転してしまいました。
    せっかくご提示いただいたのに申し訳ありません。

    今回はカスタムメニューをmoreタグ部分に挿入する方法のスレを立てたのですが、途中から親ページにのみ子ページのリストを表示するという事が出てきて頭の中でそれらが混在していました。

    最後にgatespaceさんが提示して下さったものがほとんど「親ページにのみ子ページのリストを表示する」のコードと似通っており、moreタグ以前の記事と「Read more…」という表示までするものの様でしたので、カスタムメニューに変わる子ページのタイトルのリストにはならないのではないかと思った次第です。
    単純に

    $html .= '<div>' . apply_filters( 'the_content', get_the_content( 'Read more...' ) ) . '</div>';

    こちらを省いたら思い通りの形が出来そうですね。。。

    カスタムメニューにするかget_postsを利用したものにするかは検討したいと思います。

    また、codexのサンプルを拝見しました。ありがとうございます。
    おかげさまでスニペット4を追加する事で完全に思い通りの事が出来ました。

    これで今回やりたい事全てが出来た事になります。
    たくさんご回答いただき本当にありがとうございました。
    また、こちらの意向が2転3転した事で不快な思いをさせてしまったり、ご負担を増やしてしまい申し訳ありませんでした。
    今後は何がやりたいのか、本当にそれが最前かを検討した上でご質問させていただきたいと思います。

    nobitaさん、hissyさん、gatespaceさん、ありがとうございました。
    このスレは解決いたしましたので、解決済みとさせていただきます。

    断念してなかったんですね

    if( ( is_page( 7 ) or in_array( 7, get_post_ancestors( $post->ID ) ) ) and

    だと、かっこ悪いですか?

    あっ 解決済みですね

    トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ありがとうございます。
    orで行けたのですね。。。
    そちらのコードでもちゃんと表示が出来ました。

    解決済みでしたが、ありがとうございました。

11件の返信を表示中 - 16 - 26件目 (全26件中)
  • トピック「moreタグ部分にコンテンツを挿入」には新たに返信することはできません。