web-dev-qa-db-ja.com

サブシングルページを作成する

カスタム投稿タイプで詳細なコンテンツを表示するための「サブシングルページ」を作成することができればと思います。このタイプのURLを持つ特定のテンプレートを使用してページを生成する方法はありますか。

domain.com/custom-post-type-slug/single-slug/sub-single-slug/

注:私は私の投稿の各セクションに複数のサブシングルページが必要です(ACFによって追加されたコンテンツ)。私のセクションはすべて各投稿で同じなので、スラッグは動的である必要はありません。

ありがとうございました!

2
William Ode

これが解決策です(Origin: http://www.placementedge.com/blog/create-post-sub-pages/

// Fake pages' permalinks and titles. Change these to your required sub pages.
$my_fake_pages = array(
    'reviews' => 'Reviews',
    'purchase' => 'Purchase',
    'author' => 'Author Bio'
);

add_filter('rewrite_rules_array', 'fsp_insertrules');
add_filter('query_vars', 'fsp_insertqv');

// Adding fake pages' rewrite rules
function wpse_261271_insertrules($rules)
{
    global $my_fake_pages;

    $newrules = array();
    foreach ($my_fake_pages as $slug => $title)
        $newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?books=$matches[1]&fpage=' . $slug;

    return $newrules + $rules;
}

// Tell WordPress to accept our custom query variable
function wpse_261271_insertqv($vars)
{
    array_Push($vars, 'fpage');
    return $vars;
}

// Remove WordPress's default canonical handling function

remove_filter('wp_head', 'rel_canonical');
add_filter('wp_head', 'fsp_rel_canonical');
function wpse_261271_rel_canonical()
{
    global $current_fp, $wp_the_query;

    if (!is_singular())
        return;

    if (!$id = $wp_the_query->get_queried_object_id())
        return;

    $link = trailingslashit(get_permalink($id));

    // Make sure fake pages' permalinks are canonical
    if (!empty($current_fp))
        $link .= user_trailingslashit($current_fp);

    echo '<link rel="canonical" href="'.$link.'" />';
}

パーマリンクをフラッシュするのを忘れないでください!設定>パーマリンク>保存してフラッシュします

0
William Ode

まず、カスタム投稿タイプを階層構造になるように登録する必要があります。つまり、投稿は親投稿を持つことができます。

その後、パーマリンク構造がexample.com/%postname%/に設定されていることを確認する必要があります。

それができたら、sub-single-slugという名前の子カスタム投稿を作成し、WordPressバックエンドエディタの Page Attribute からsingle-slugをその親として設定するだけです(Screen Optionsでチェックインされていることを確認してください)。それで全部です。これであなたのsub-single-slug投稿はexample.com/custom-post-type/single-slug/sub-single-slug/のようなリンク構造になります。

たとえば、カスタム投稿タイプを次のように登録します。

function wpse_register_custom_post_type() {

    $labels = array(
        "name" => __( 'custom post type', 'text-domain' ),
        "singular_name" => __( 'custom post types', 'text-domain' ),
    );

    $args = array(
        "label" => __( 'custom post type', 'text-domain' ),
        "labels" => $labels,
        "description" => "",
        "public" => true,
        "publicly_queryable" => true,
        "show_ui" => true,
        "show_in_menu" => true,
        "capability_type" => "post",
        "map_meta_cap" => true,
        "hierarchical" => true,
        "rewrite" => array( "slug" => "custom_post_type", "with_front" => true ),
        "query_var" => true,
        "supports" => array( "title", "editor", "thumbnail", "custom-fields", "page-attributes" ),
        "taxonomies" => array( "category", "post_tag" ),
    );

    register_post_type( "custom_post_type", $args );
}

add_action( 'init', 'wpse_register_custom_post_type' );
3
Scott