私は最近この質問をしました カスタム投稿タイプ - パーマリンク構造でpost_idを使う そして解決しましたが、'has_archive' => true
を有効にしたので与えられた解決策はもはや機能しません。説明させてください:
私はこの構造の後にいます:
archive-events.php
=>/news/events /single-events.php
=>/news/events /%post_id%/%postname%単一のイベントパーマリンクでpost_id
を取得するには、CPTスラッグに%post_id%
を追加する必要がありましたが、has_archive => true
を有効にすると、アーカイブページがスラッグになります。この場合、/news/events/%post_id%/
になりますが、これは無効です。
だから私の質問:
Has_archive => trueを使ったときにpost_idをパーマリンク構造にするにはどうすればいいですか?
必要なものを取得するには、カスタムの書き換え規則を追加し、パーマリンクの構成をフィルタリングする必要があります。次のコードは両方を行います。
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Event Permalinks
*/
// Not a WordPress context? Stop.
! defined( 'ABSPATH' ) and exit;
// Wait until all needed functions are loaded.
add_action( 'init', array ( 'Bradys_Events', 'init' ) );
class Bradys_Events
{
/**
* Creates a new instance.
*
* @wp-hook init
* @see __construct()
* @return void
*/
public static function init()
{
new self;
}
/**
* Constructor
*/
public function __construct()
{
$args = array(
'label' => 'events',
'public' => true,
'hierarchical' => false,
'has_archive' => true,
'rewrite' => array(
'with_front' => false,
'slug' => "news/events"
),
'supports' => array( 'title', 'editor', 'thumbnail' )
);
register_post_type("events", $args);
// Prevent WordPress from sending a 404 for our new perma structure.
add_rewrite_rule(
'^news/events/(\d+)/[^/]+/?$',
'index.php?post_type=events&p=$matches[1]',
'top'
);
// Inject our custom structure.
add_filter( 'post_type_link', array ( $this, 'fix_permalink' ), 1, 2 );
}
/**
* Filter permalink construction.
*
* @wp-hook post_type_link
* @param string $post_link default link.
* @param int $id Post ID
* @return string
*/
public function fix_permalink( $post_link, $id = 0 )
{
$post = &get_post($id);
if ( is_wp_error($post) || $post->post_type != 'events' )
{
return $post_link;
}
// preview
empty ( $post->slug )
and $post->slug = sanitize_title_with_dashes( $post->post_title );
return home_url(
user_trailingslashit( "news/events/$post->ID/$post->slug" )
);
}
}
一度wp-admin/options-permalink.php
にアクセスして、WordPressに書き換え規則を更新させてください。