サポート » 使い方全般 » カスタム投稿タイプでスラッグ名つきのURLが表示できない

  • 解決済 webarton

    (@webarton)


    カスタム投稿タイプを使ってみたいのですが、URLを「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」としたいのにうまくできず悩んでいます。

    http://www.h-fj.com/blog/archives/2010/06/15-172024.php
    こちらの記事の「rewrite」の項目に、query_var => true とすると「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」のアドレスで、そのカスタム投稿のページを開くことができる」と拝見したので、そうしてみたのですが、個別記事のページは「ページが見つかりません」になってしまいます。パーマリンクがデフォルトの状態だと表示されます。

    function.phpには以下のように書いています。

    add_action( 'init', 'create_post_type' );
    function create_post_type() {
      register_post_type( 'tokyo', /* post-type */
        array(
          'labels' => array(
            'name' => __( '東京' ),
            'singular_name' => __( '東京' )
          ),
          'public' => true,
          'menu_position' =>5,
          'rewrite' => true,
          'supports' => array('title','editor','thumbnail',
          'custom-fields','excerpt','author','trackbacks',
          'comments','revisions','page-attributes')
    
        ) //array
      ); //register_post_type

    どうしたら「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」になるのでしょうか。

    すみません、よろしくお願い致します。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • なお、rewriteを行う場合、register_post_type関数を実行した後に「$wp_query->flush_rules();」を実行して、rewriteのルールを設定しなおす必要があるようです。

    こちらは?

    トピック投稿者 webarton

    (@webarton)

    kvexさん、今日もすみません。ありがとうございます。

    そうですよね・・・それもやらないとダメです、ということですよね・・・
    自分で読んだときは、register_post_typeを実行しないとメモリの開放のようなことができません、と書いてあるのだと思って、とりあえずそれは置いておこうと思って無視していました。

    それで、この位置に書いてみたのですが、

    Fatal error: Call to a member function flush_rules() on a non-object

    となってしまいました。他の位置でも試したのですがエラーになり、「$wp_query->flush_rules();」で調べてみたのですがよくわかりませんでした。

    add_action( 'init', 'create_post_type' );
    function create_post_type() {
      register_post_type( 'tokyo', /* post-type */
        array(
          'labels' => array(
            'name' => __( '東京' ),
            'singular_name' => __( '東京' )
          ),
          'public' => true,
          'menu_position' =>5,
          'rewrite' => true,
          'supports' => array('title','editor','thumbnail',
          'custom-fields','excerpt','author','trackbacks',
          'comments','revisions','page-attributes')
    
        ) //array
      ); //register_post_type
    $wp_query->flush_rules();
    }

    global $wp_query;

    が必要なんじゃないですか?

    トピック投稿者 webarton

    (@webarton)

    kvexさん!!!すみません!

    global $wp_query;
    $wp_query->flush_rules();

    としてみたら、こんどはエラーがこうなってしまって

    Fatal error: Call to undefined method WP_Query::flush_rules()

    でもそもそもflush_rules()の意味がわからなかったから「flush_rules()」でGoogle検索したら、「$wp_rewrite->flush_rules();」という書き方ばかり出てきたので、こう書き直してみたら、どうやら表示されているんです!

    global $wp_rewrite;
    $wp_rewrite->flush_rules();

    ただ意味がわかってやったことではないので、これでいいのかよくわからないのですが、エラーにならず「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」で表示されるんです。

    ということは、これで大丈夫なのでしょうか・・・

    トピック投稿者 webarton

    (@webarton)

    今、'rewrite' => true,と書かなくても、

    global $wp_rewrite;
    $wp_rewrite->flush_rules();

    を書いてあればエラーにならず表示されることに気付きました。

    functions.phpにこちらを書いてます。

    /* カスタム投稿タイプの追加 */
    add_action( 'init', 'create_post_type' );
    function create_post_type() {
      register_post_type( 'tokyo', /* post-type */
        array(
          'labels' => array(
            'name' => __( '東京' ),
            'singular_name' => __( '東京' )
          ),
          'public' => true,
          'menu_position' =>5,
          /* ここから */
          'supports' => array('title','editor','thumbnail',
          'custom-fields','excerpt','author','trackbacks',
          'comments','revisions','page-attributes')
          /* ここまで */
    
        ) //array
    
      ); //register_post_type
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
      register_post_type( 'kanagawa', /* post-type */
        array(
          'labels' => array(
            'name' => __( '神奈川' ),
            'singular_name' => __( '神奈川' )
          ),
          'public' => true,
          'menu_position' =>6,
          /* ここから */
          'supports' => array('title','editor','thumbnail',
          'custom-fields','excerpt','author','trackbacks',
          'comments','revisions','page-attributes')
          /* ここまで */
    
        ) //array
      ); //register_post_type
    $wp_rewrite->flush_rules();
    /* ここから */
      register_taxonomy(
        'tokyo-cat', /* タクソノミーの名前 */
        'tokyo', /* tokyo投稿で設定する */
        array(
          'hierarchical' => true, /* 親子関係が必要なければ false */
          'update_count_callback' => '_update_post_term_count',
          'label' => '東京のカテゴリー',
          'singular_label' => '東京のカテゴリー',
          'public' => true,
          'show_ui' => true
        ) //array
      ); //register_taxonomy
    /* ここまでを追加 */
    $wp_rewrite->flush_rules();
    /* ここから */
      register_taxonomy(
        'kanagawa-cat', /* タクソノミーの名前 */
        'kanagawa', /* kanagawa投稿で設定する */
        array(
          'hierarchical' => true, /* 親子関係が必要なければ false */
          'update_count_callback' => '_update_post_term_count',
          'label' => '神奈川のカテゴリー',
          'singular_label' => '神奈川のカテゴリー',
          'public' => true,
          'show_ui' => true
        ) //array
      ); //register_taxonomy
    /* ここまでを追加 */
    $wp_rewrite->flush_rules();
    }
    /* カスタム投稿タイプの追加 ここまで */

    index.phpにこちらを書いてます。

    <?php
    /* カスタム投稿タイプを表示する */
    $loop = new WP_Query( array( 'post_type' => 'izu', 'posts_per_page' => 10 ) );
    while ( $loop->have_posts() ) : $loop->the_post();
    ?>
    
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    
    /* カスタム分類を表示 */
    <p class="taxonomies">
        <?php echo  get_the_term_list( $post->ID, 'izu-cat', 'タクソノミー', ', ', '' ); ?>
    </p>
    /* コンテンツ */
    <div class="custom-post-content">
        <?php the_content('続きを読む&raquo;'); ?>
    </div>
    <?php endwhile; /* カスタム投稿タイプを表示する ここまで */ ?>
    <?php
    /* カスタム投稿タイプを表示する */
    $loop = new WP_Query( array( 'post_type' => 'east', 'posts_per_page' => 10 ) );
    while ( $loop->have_posts() ) : $loop->the_post();
    ?>
    
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    
    /* カスタム分類を表示 */
    <p class="taxonomies">
        <?php echo  get_the_term_list( $post->ID, 'east-cat', 'タクソノミー', ', ', '' ); ?>
    </p>
    /* コンテンツ */
    <div class="custom-post-content">
        <?php the_content('続きを読む&raquo;'); ?>
    </div>
    <?php endwhile; /* カスタム投稿タイプを表示する ここまで */ ?>

    なるほど、すみませんでした、使ったこともないことを発言してしまって。
    よけいに混乱させてしまいましたかね?

    こちらは未解決?解決済み?
    質問の答にはなってませんがカスタム投稿タイプを使うにはCMS Pressというプラグインを使うのが簡単だったりします。
    http://wordpress.org/extend/plugins/cms-press/

    トピック投稿者 webarton

    (@webarton)

    kvexさん、ありがとうございます!kvexさんが指摘してくださったことがきっかけで大丈夫になったので、ほんとありがとうございます。

    umbrella_processさん、ありがとうございます!CMS Pressは試したことがありませんでした。他のプラグインを試したとき、functions.phpに書いたほうがわかりやすい気がして、それ以上プラグインを探さなかったんです。CMS Pressも試してみます!ありがとうございます。

    トピック投稿者 webarton

    (@webarton)

    umbrella_processさん、CMS Press試してみました。

    Edit Content TypeのPermalink Structureを
    %identifier%/%postname%/ とすれば、「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」にできました。ありがとうございます。

    実は、「http://ブログのアドレス/カスタム投稿タイプ名/タクソノミ/個々のカスタム投稿のスラッグ/」とするのが目標なんです。そうするには、このプラグインでは「Allowed tags: %year%, %monthnum%, %day%, %hour%, %minute%, %second%, %postname%, %post_id%, 」と書いてあったので、間にタクソノミを入れるのは無理なのかなあと思いました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタム投稿タイプでスラッグ名つきのURLが表示できない」には新たに返信することはできません。