Получить URL-адрес архива пользовательского типа записи


Это кажется глупым вопросом. Но я не могу этого понять:(.

Мне нужно отобразить кнопку дома, которая ведет к URL-адресу архива пользовательского post_type (архив-{post_type}.php). Как мне это сделать?

Author: ariefbayu, 2011-03-08

2 answers

Привет @Тихий:

Оказывается, в WordPress 3.1 есть функция, которая делает именно то, что вы хотите, и она называется get_post_type_archive_link(); вот как вы бы назвали ее (при условии, что пользовательский тип записи называется 'product'):

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

Ниже приведен мой предыдущий ответ, прежде чем я обнаружил, что WordPress действительно имеет встроенную функцию для этого варианта использования.

Предыдущий ответ:

Если я что-то не упустил из виду в основном исходном коде WordPress 3.1, я думаю, что вы ищете функцию, подобную 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 );
  }
}

На самом деле я работал над этой точной логикой в выходные, хотя я еще не на 100% уверен, что порядок логики в целом верен во всех случаях использования, которые может увидеть WordPress, хотя, вероятно, это произойдет работайте для любого конкретного сайта.

Это также отличная вещь, которую можно предложить добавить в WordPress через трасса что, я думаю, я сделаю позже этим вечером.

 27
Author: MikeSchinkel, 2011-03-09 04:29:25

Когда вы регистрируетесь тип записи вы можете передать строку как слаг с параметром "has_archive" и убедитесь, что вы также установить переписать значение true или массив, но не ложно и тогда ваша КПП архиве 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
Author: Bainternet, 2011-03-08 23:44:12