サポート » テーマ » カスタム投稿のメニューのリンクがうまくいかない

  • 解決済 studiooak

    (@studiooak)


    以前、カスタム投稿の最新記事(抜粋)をトップページにした自作テーマでページングがうまくいかずにフォーラムで助けを求め、is_main_queryのコードを教えて頂き、いろいろ試したところ、問題は自作テーマのコードにある事がわかりました。どこに問題があるか整理しようと思い、いくつかは解決しました。twentyelevenの子テーマをカスタマイズして、元のデザインでほぼ問題なく表示。is_main_queryを教えて頂いたおかげでページングもできています。どうしても解決できないのが、カスタム投稿タイプごとの最新記事一覧ページへのメニューのリンク。
    header(トップページのみに使用)とheader-2とfooterに設定しています。コードはほぼ同じ、divやulのidが違うだけです。自作テーマの時は機能していましたが、twentyelevenの子テーマを設定してから、「Notice: Undefined offset: 0 in /Applications/MAMP/htdocs/wordpress/wp-includes/functions.php on line 2422」の警告が出ます。調べてみると、function wp_list_filterの設定がしてある部分のコードで、if ( $m_value == $to_match[ $m_key ] )の行でした。
    listの配列の何かがおかしいのかなと思い、いろいろやってみましたが、どれも外れ。PHPの文法に関して始めからきちんと勉強しないとダメだと痛感しています。

    「要素の検証」でタグを見てみると、6つのうち、最初のカスタム投稿タイプ名だけがリンクされています。なお、警告が出るのは、トップページにだけです。以下が現在のメニュー部分のコードです。

    <div id="nav">
       <ul>
              <?php $mycpts = get_post_types(
    		               array('antiaging','house','marriage','family','town','try')
    					   ); ?>
              <?php foreach($mycpts as $mycpt): ?>
         <li><a href="<?php echo get_post_type_archive_link($mycpt); ?>">
              <?php  echo get_post_type_object($mycpt)->label; ?>
            </a>
         </li>
              <?php endforeach; ?>
        </ul>
       </div>

    現在の設定状況:twentyelevenの子テーマでカスタマイズ。表示を「最新投稿」でindex.php使用 Custum Post Type Ul使用 *カスタム投稿タイプは、ナビには入れないものが別に1つあります。 functions.phpに教えて頂いた以下のコード 

    add_action( 'pre_get_posts', 'mycpts_display_eight_articles' );
    function mycpts_display_eight_articles( $wp_query ) {
      if ( $wp_query->is_main_query() && $wp_query->is_home() ) {
        $wp_query->set( 'posts_per_page', 8 );
        $wp_query->set( 'post_type', array( 'antiaging', 'house', 'marriage', 'family', 'town', 'try' ) );
      }
    }

    何度も恐縮ですが、どうぞ教えて頂けますでしょうか。

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

    (@gatespace)

    こんにちは。

    端的にいうと、get_post_types() の使い方が間違っています。
    リンク先のCodexを見てもらうと分かりますが、投稿タイプ名を配列で指定することはできません。
    出力のサンプルや指定できるパラメーターはCodexにも載っていますが、
    以下に「デフォルトの投稿タイプ以外」かつ「公開用の投稿タイプ」かつ「アーカイブを持つ投稿タイプ」
    の出力例を載せておきますので、ご参考までに。

    <?php
    $args = array(
    	'public'   => true,
    	'has_archive' => true,
    	'_builtin'    => false
    );
    $output = 'objects'; // names or objects
    $post_types = get_post_types($args, $output);
    if (!empty($post_types)) {
    	echo "<ul>";
    	foreach ($post_types as $post_type ) {
    		echo '<li><a href="'.get_post_type_archive_link($post_type->name).'">' . esc_html($post_type->labels->singular_name) . '</a></li>';
    	}
    	echo "</ul>";
    }
    ?>

    トピック投稿者 studiooak

    (@studiooak)

    gatespaceさん
    お返事いただいてとても嬉しいです。本当に何度もお手数かけて申し訳ないです。

    参考書ではget_post_types(array(‘_builtin’ =>false))になっていました。
    途中で、ここのナビでは表示したくないカスタム投稿タイプが増えたため、入れたいタイプだけ配列にすればいいのかと思ってしまいました。

    頂いたアドバイスで試行錯誤やってみます。
    ありがとうございました。

    モデレーター gatespace

    (@gatespace)

    こんにちは。
    ※参考書に書いてあっても、Codexも確認した方が理解が深まりますよ。

    途中で、ここのナビでは表示したくないカスタム投稿タイプが増えたため、入れたいタイプだけ配列にすればいいのかと思ってしまいました。

    任意のカスタム投稿タイプのみをナビゲーションとして使いたいのであれば、
    カスタムメニューで実装した方が良いかもしれません。

    カスタムメニューの登録には register_nav_menus を使い、
    表示させるには wp_nav_menu を使います。
    (用例はデフォルトテーマを参考にすると良いです)

    デフォルトのままではカスタムメニューにカスタム投稿タイプのアーカイブは追加しづらいですが、
    プラグインを作ってもらったことがありますので、そちらを利用してみてください。

    トピック投稿者 studiooak

    (@studiooak)

    gatespaceさん、昨日教えて頂いたコードでやってみて、表示できました!
    とっても嬉しいです。
    後から教えて頂いたプラグインもダウンロードしてみましたが、Custum Post Type Ulには、show_in_nav_menusという項目が見当たらないのです。プラグインの方が管理が楽そうなので、コードを書いてやってみようと思っています。

    勉強にもなったし、本当に感謝しています。ありがとうございました。

    モデレーター gatespace

    (@gatespace)

    Custum Post Type Ul にshow_in_nav_menusの設定項目はありませんが、
    public が true なら show_in_nav_menusもtrueになります。

    トピック投稿者 studiooak

    (@studiooak)

    そうなんですか!それは嬉しい。
    さっそくやってみます。
    細かいフォローまでしていただいて、本当に感謝です。

    トピック投稿者 studiooak

    (@studiooak)

    gatespaceさん

    何度もごめんなさい。
    教えて頂いたプラグイン WPX Nav Menusですが、プラグインを有効化すると、メニューの管理画面に以下のコードが出ます。
    Notice: wp_enqueue_script was called incorrectly. Scripts and styles should not be registered or enqueued until the wp_enqueue_scripts, admin_enqueue_scripts, or inithooks.

    一応、設定してみると、正しく作動してはいます。
    大丈夫でしょうか?

    モデレーター gatespace

    (@gatespace)

    教えて頂いたプラグイン WPX Nav Menusですが、プラグインを有効化すると、メニューの管理画面に以下のコードが出ます。
    Notice: wp_enqueue_script was called incorrectly. Scripts and styles should not be registered or enqueued until the wp_enqueue_scripts, admin_enqueue_scripts, or inithooks.

    実際にエラーの起きているファイルの記述がないので、
    当該プラグインのものどうか分かりかねますが、
    WordPressがデバッグモードの時にのみ表示されます。
    (デバッグモードをやめれば表示されません)
    気になるようでしたら、作者に報告してはどうでしょうか?

    ※個人的には Noticeの表記はあまり気にしなくても良いかと思います。

    トピック投稿者 studiooak

    (@studiooak)

    エラーコードが出ているのは、カスタムメニューを指定する管理画面のみです。
    このプラグインを停止すると、メッセージが消えます。
    何かメッセージが出るとドキドキしちゃうので、思わずご連絡してしまいました。

    一応、作者さんに聞いてみます。
    お返事ありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタム投稿のメニューのリンクがうまくいかない」には新たに返信することはできません。