web-dev-qa-db-ja.com

カスタム投稿タイプget_post_type_archive_link($ post_type)はfalseを返します

パーマリンクは私が作成したカスタムyoga-eventタイプの個々の投稿に対して(ついに)働いています。

そしてアーカイブはURLを書き換えることなく動作します。

http://website.localhost/?post_type=yoga-event

しかしget_post_type_archive_link( 'yoga-event' )はfalseを返します。

これは私がregister_post_typeに送っている配列です:

Array
(
        [labels] => Array
                (
                        [name] => Yoga Events
                        [singular_name] => Yoga Event
                        [menu_name] => Yoga Events
                        [all_items] => Yoga Events
                        [add_new] => Add New
                        [add_new_item] => Add New Yoga Event
                        [edit_item] => Edit Yoga Event
                        [new_item] => New Yoga Event
                        [view_item] => View Yoga Event
                        [search_items] => Search Yoga Events
                        [not_found] => No Yoga Events found
                        [not_found_in_trash] => No Yoga Events found in Trash
                        [parent_item_colon] => Parent Yoga Event:
                )

        [public] => 1
        [rewrite] => Array
                (
                        [slug] => yoga-event
                )

        [has_arhchive] => 1
        [menu_icon] => dashicons-book-alt
)

私はこのように私自身の "アーカイブ"を作ることができます。

$type = 'yoga-event';
$args=array(
    'post_type' => $type,
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'ignore_sticky_posts'=> 1);

$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : 
    $my_query->the_post(); 
    ?>

        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?> </a></p>

    <?php

    endwhile;
} // list of yoga-event items

しかし、私はregister_post_typeが取得している配列にはある種の設定ミスがあると思います。

何か洞察がありますか?

シモンズ:

//List Post Types
foreach ( get_post_types( '', 'names' ) as $post_type ) {
     echo '<p>' . $post_type . '</p>';
}

(とりわけ)yoga-eventを返します。

2
MikeiLL

あなたのregister_post_type行を見ることができますか?それらは通常、register_post_type( 'some-post-type', $args );のようなものです。

この例では、some-post-typeget_post_type_archive_link( 'some-post-type' )で使用するIDであり、書き換えスラッグyoga-eventではありません。

1
frogg3862

コミュニティの1人が指摘した、上記のコードにタイプミスがありましたが、私がここで追加するのは、パズルの最後のピースは、このちょっとしたコード( SOベース /)です。 WPが理解している(出力する)CPTを調べることができます。

$type = 'yoga-event';
//let's look at our CPT:    
$type_obj = get_post_type_object($type);
mz_pr($type_obj);

function mz_pr($message) {
    echo "<pre>";
    print_r($message);
    echo "</pre>";

また、この素晴らしい CPT Class はCPTを生成するための素晴らしい方法です。 (ただし、 "インスタンスメソッド"で追加する方法としてはうまく機能していないようなので、現在'has_archive' => True`` to theregister_post_types`配列を手動で追加しています。

0
MikeiLL