0

How can I configure to have two sets of URL that actually using the same content?

For example:

(set 1)

samplesite.com
samplesite.com/about/
samplesite.com/contact/
samplesite.com/projects/

(set 2)

samplesite.com/fr/
samplesite.com/fr/about/
samplesite.com/fr/contact/
samplesite.com/fr/projects/

And then in my templates, I would like to check whether the request has fr or without.

Is this possible without any plugin?

2 Answers 2

1

You can create custom post type to manage your secondary content (multilanguage i suppose) and set these /fr/ your CPT rewrite base.

Create a CPT function add this to your function.

$rewrite = array(
    'slug'                  => 'fr',
    'with_front'            => false,
    'pages'                 => true,
    'feeds'                 => true,
);

After that set CPT rewrite option to rewrite => $rewrite. Not on same content but easy solution for your problem.

Sample CPT code for you secondary content;

    function secondary_content_french_post_type() {

    $labels = array(
        'name'                  => _x( 'French', 'Post Type General Name', 'text_domain' ),
        'singular_name'         => _x( 'French', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'             => __( 'French', 'text_domain' ),
        'name_admin_bar'        => __( 'French', 'text_domain' ),
        'archives'              => __( 'Item Archives', 'text_domain' ),
        'attributes'            => __( 'Item Attributes', 'text_domain' ),
        'parent_item_colon'     => __( 'Parent Item:', 'text_domain' ),
        'all_items'             => __( 'All Items', 'text_domain' ),
        'add_new_item'          => __( 'Add New Item', 'text_domain' ),
        'add_new'               => __( 'Add New', 'text_domain' ),
        'new_item'              => __( 'New Item', 'text_domain' ),
        'edit_item'             => __( 'Edit Item', 'text_domain' ),
        'update_item'           => __( 'Update Item', 'text_domain' ),
        'view_item'             => __( 'View Item', 'text_domain' ),
        'view_items'            => __( 'View Items', 'text_domain' ),
        'search_items'          => __( 'Search Item', 'text_domain' ),
        'not_found'             => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'    => __( 'Not found in Trash', 'text_domain' ),
        'featured_image'        => __( 'Featured Image', 'text_domain' ),
        'set_featured_image'    => __( 'Set featured image', 'text_domain' ),
        'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
        'use_featured_image'    => __( 'Use as featured image', 'text_domain' ),
        'insert_into_item'      => __( 'Insert into item', 'text_domain' ),
        'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
        'items_list'            => __( 'Items list', 'text_domain' ),
        'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
        'filter_items_list'     => __( 'Filter items list', 'text_domain' ),
    );
//This is Rewrite Code
    $rewrite = array(
        'slug'                  => 'fr',
        'with_front'            => false,
        'pages'                 => true,
        'feeds'                 => true,
    );
//This is Rewrite Code
    $args = array(
        'label'                 => __( 'French', 'text_domain' ),
        'description'           => __( 'French', 'text_domain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'custom-fields','comments','thumbnail' ),
        'taxonomies'            => array( 'category' ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 10,
        'menu_icon'             => 'dashicons-nametag',
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => false,
        'can_export'            => true,
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'rewrite'               => $rewrite,
        'capability_type'       => 'post',
        'show_in_rest'          => false,
    );
    register_post_type( 'french', $args );

}
add_action( 'init', 'secondary_content_french_post_type', 0 );
5
  • thanks but still not sure if I understand this solution.... where does this $rewrite go to?
    – Run
    Commented Aug 14, 2018 at 14:24
  • 1
    I will update my answer with a CPT function then. Commented Aug 14, 2018 at 14:29
  • aw now I understand what you are getting at. it is adding another post type. then I will have to duplicate my content twice. This is not ideal... :-(
    – Run
    Commented Aug 14, 2018 at 15:05
  • 1
    Allright than you can use custom rewrite rules but this way complicated. I can not create a new answer with code ( because i cant write code on Mobile phone :) ) . But in two hours i can add a New answer Commented Aug 14, 2018 at 15:13
  • thank you very much. i will check 'custom rewrite rules' out for the time being then. thanks!
    – Run
    Commented Aug 14, 2018 at 15:16
0

My answer with the help from Sally CJ in this question:

/**
 * Add new rewrite rule
 */
function create_new_url_querystring() {
    // https://wordpress.stackexchange.com/questions/60173/rewrite-rule-for-multilingual-website-like-qtranslate
    add_rewrite_rule(
        '^fr/?$',
        'index.php?&page_id=2&lang=fr',
        'top'
    );

    add_rewrite_rule(
        '^fr/(.?.+?)(?:/([0-9]+))?/?$',
        'index.php?pagename=$matches[1]&page=$matches[2]',
        'top'
    );

    add_rewrite_rule(
        'fr/project/(.+?)(?:/([0-9]+))?/?$',
        'index.php?project=$matches[1]&page=$matches[2]',
        'top'
    );

    // flush_rewrite_rules();
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_action('init', 'create_new_url_querystring');

/**
 * Usage: get_query_var('lang');
 */
function query_vars($query_vars) {
    $query_vars[] = "lang";
    return $query_vars;
}
add_filter('query_vars', 'query_vars');

/**
 * Cancel canonical redirect on home page.
 * https://wordpress.stackexchange.com/questions/311476/add-rewrite-rule-to-call-front-page-php
 */
add_action('template_redirect', function() {
    if (is_front_page()) {
        remove_action('template_redirect', 'redirect_canonical');
    }
}, 0);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.