web-dev-qa-db-ja.com

カスタムのpost_typeのアーカイブURLを取得する

ばかげた質問のようです。しかし、私はそれを理解することはできません:(。

カスタムのpost_typeのアーカイブURL(archive- {post_type} .php)に移動するボタンを自宅に表示する必要があります。それ、どうやったら出来るの?

25
ariefbayu

こんにちは@ Silent:

WordPress 3.1には、希望どおりに機能する関数があり、get_post_type_archive_link()という名前です。これをどのように呼び出すかは次のとおりです'product'という名前のカスタム投稿タイプを想定):

<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>

以下は、WordPressが実際にこのユースケース用の関数をビルトインしていることを発見する前の以前の回答です。

事前回答:

WordPressのコアソースコードで何かを見落としていなければ、このように呼び出すことができるget_archive_link()のような関数を探していると思います'product'):

<a href="<?php echo get_archive_link('product'); ?>">Products</a>

そして、あなたが書いているかもしれないプラグインのためにあなたのテーマのfunction.phpファイルまたは.phpファイルに置くことができるソースコードはここにあります:

if (!function_exists('get_archive_link')) {
  function get_archive_link( $post_type ) {
    global $wp_post_types;
    $archive_link = false;
    if (isset($wp_post_types[$post_type])) {
      $wp_post_type = $wp_post_types[$post_type];
      if ($wp_post_type->publicly_queryable)
        if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
          $slug = $wp_post_type->has_archive;
        else if (isset($wp_post_type->rewrite['slug']))
          $slug = $wp_post_type->rewrite['slug'];
        else
          $slug = $post_type;
      $archive_link = get_option( 'siteurl' ) . "/{$slug}/";
    }
    return apply_filters( 'archive_link', $archive_link, $post_type );
  }
}

私は実際に週末にこの正確なロジックに取り組んでいましたが、WordPressが表示する可能性のあるすべてのユースケースでロジックの順序が一般的に正しいことはまだ100%確信していません特定のサイト。

これはtrac経由でWordPressに追加することを提案するのも素晴らしいことです。今晩遅くに。

25
MikeSchinkel

投稿タイプを登録するとき、「has_archive」パラメータを使用して文字列をスラッグとして渡し、rewriteをtrueまたは配列に設定しますが、falseではなく、CPTアーカイブURLが http:// www .YOURDOMAIN.com/has_archive_slug たとえば

例えばregister_post_typeで設定した場合:

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'show_in_menu' => true, 
    'query_var' => true,
    'rewrite' => 'product',
    'capability_type' => 'post',
    'has_archive' => 'products', 
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt','comments')
  ); 
 register_post_type('product',$args);

単一のURLは http://www.YOURDOMAIN.com/product/postName で、アーカイブURLは http://www.YOURDOMAIN.com/products/ です=

12
Bainternet