web-dev-qa-db-ja.com

カスタム投稿タイプアーカイブのスラッグ

私は新しいカスタム投稿タイプ「プロジェクト」を作成し、このタイプのすべての投稿のアーカイブをmysite.com/projectsで利用できるようにしたいです。現時点では、mysite.com/projects/project-titleのように、すべてのプロジェクトの単一の投稿がスラッグで表示されていますが、mysite.com/projectsにアクセスすると404が表示されます。

カスタム投稿タイプを作成する方法は次のとおりです。

   /* Create the Project Custom Post Type ------------------------------------------*/
 function create_post_type_project() 
 {
$labels = array(
    'name' => __( 'Projects' ),
    'singular_name' => __( 'Project' ),
    'add_new' => __('Add New'),
    'add_new_item' => __('Add New Project'),
    'edit_item' => __('Edit Project'),
    'new_item' => __('New Project'),
    'view_item' => __('View Project'),
    'search_items' => __('Search Project'),
    'not_found' =>  __('No project found'),
    'not_found_in_trash' => __('No project found in Trash'), 
    'parent_item_colon' => ''
  );

  $args = array(
    'labels' => $labels,
    'public' => true,
    'exclude_from_search' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'query_var' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    // Uncomment the following line to change the slug; 
    // You must also save your permalink structure to prevent 404 errors
    'rewrite' => array( 'slug' => 'projects' ),
    'has_archive' => true,
    'supports' => array('title','editor','thumbnail'),

  ); 

  register_post_type(__( 'project' ),$args);
    }
2
urok93

何も間違っているようには見えません - (そしてコメントが示唆するように書き換え規則をフラッシュするためにあなたのパーマリンク構造を保存したと思いますか?).

このプラグインを使用して、URLリダイレクトの問題を特定することをお勧めします。 http://wordpress.org/extend/plugins/monkeyman-rewrite-analyzer/ - あなたの調査結果で質問を更新してください。解決策を提供できる

しかし(これはおそらくあなたの問題の原因ではありません)、あなたは投稿タイプの名前を翻訳すべきではありません。

register_post_type('project',$args);

の代わりに

register_post_type(__( 'project' ),$args);

翻訳はユーザーの利益のためです - そしてラベルだけにあるべきです - WordPressの内部名は翻訳に依存してはいけません。

3
Stephen Harris

貼り付けたコードは正しくないようには見えませんが、要求しているものも'rewrite' => trueを使用して機能します。

http://codex.wordpress.org 州:

has_archive(ブール値または文字列)(オプション)投稿タイプのアーカイブを有効にします。デフォルトではアーカイブスラッグとして$ post_typeを使用します。

デフォルト:false

注:書き換えが有効になっている場合は、適切な書き換え規則が生成されます。また、書き換えを使用して、使用されるスラッグを変更します。

あなたの問題に対する解決策はカスタム投稿タイプのテンプレートが機能していないか作成されていないことかもしれません、あなたは自分のfunctions.phpまたはplugins関数に次のコードを追加することを試みることができます:

function _post_type_template_smart(){

    global $post;

    $single_template_name = 'single-projects.php';
    $archive_template_name = 'archive-projects.php';

    if ( is_single() && 'projects' == get_post_type() ){

        $template = locate_template(array($single_template_name), true);

        if(empty($template)) {

          include(PLUGIN_DIR . 'template/' . $single_template_name);

          exit();
        }

    }else if( is_archive() && 'projects' == get_post_type() ){

        $template = locate_template(array($archive_template_name), true);

        if(empty($template)) {

          include(PLUGIN_DIR . 'template/' . $archive_template_name);

          exit();
        }

    }

}
add_filter('template_redirect', '_post_type_template_smart');

そして、あなたの 'single-projects.php'/'archive-projects.php'ページで、コンテンツを持ってきて表示するために、ループ/ query/get_pagesを(あなたが好むものはどれでも)作成してください:

    $args = array(
        //'child_of' => 0,
        'sort_order' => 'ASC',
        'sort_column' => 'post_modified',
        'hierarchical' => 1,
        'parent' => 0,
        'post_type' => 'projects',
        'post_status' => 'publish'
    );
    $pages = get_pages( $args );
    foreach ( $pages as $project ){
        $project_id = $project->ID;
        $project_link = get_page_link($project->ID);
        $project_title = $project->post_title;
        $content = $project->post_content;
        $author = $project->post_author;
        $posted_on = $project->post_date;

        if(empty($content)){
            $content = 'There is no description for this package';
        }
        echo '<div class="content">';
        echo $content;
        echo '</div>';      

    }

お役に立てれば!

1
Terry Barriff