Используйте один и тот же тип записи с двумя разными URL в Wordpress - PullRequest
0 голосов
/ 20 июня 2019

Я работаю в проекте Wordpress, где есть пользовательский тип записи, называемый «меню», и я хочу отображать различное содержимое на основе пользовательских полей в соответствии с каталогом URL. Эта часть будет довольно проста для архивирования, но у меня возникли проблемы при попытке выяснить, как установить URL-адреса. Как установить два разных URL для одного и того же пользовательского типа записи?

url1 = / menu /

url2 = / directory2 / menu /

вот мой код:

//MENU POST Type

add_action('init', 'my_custom_menu');
function my_custom_menu()
{
    $labels = array(
        'name' => _x('MENU', 'post type general name'),
        'singular_name' => _x('MENU', 'post type singular name'),
        'add_new' => _x('新しくMENUを書く', 'menu'),
        'add_new_item' => __('MENU記事を書く'),
        'edit_item' => __('MENU記事を編集'),
        'new_item' => __('新しいMENU記事'),
        'view_item' => __('MENU記事を見る'),
        'search_menu' => __('MENU記事を探す'),
        'not_found' => __('MENU記事はありません'),
        'not_found_in_trash' => __('ゴミ箱にMENU記事はありません'),
        'parent_item_colon' => '',
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array(
            'with_front' => false,
            'slug' => 'menu',
        ),
        'capability_type' => 'post',
        'hierarchical' => false,
        'supports' => array('title', 'editor', 'thumbnail', 'post_thumbnails'),
        'has_archive' => true,
    );
    register_post_type('menu', $args);
}

// Return correct permalink for CPT with CT in slug
function menu_links($post_link, $post = 0)
{
    $terms = wp_get_object_terms($post->ID, 'locationcat');
    if ($post->post_type === 'menu') {
        return home_url('menu/' . $terms[0]->slug . '/' . $post->ID . '/');
    } else {
        return $post_link;
    }
}
add_filter('post_type_link', 'menu_links', 1, 3);

// Get the Post ID from permalink structure base/CT/Post_ID
function menu_rewrites_init($post_link, $post = 0)
{
    $placesTerms = get_terms([
      'taxonomy' => 'menucat',
      'hide_empty' => false
    ]);
    $placesArray = [];
    foreach($placesTerms as $term){
      array_push($placesArray, $term->slug);
    }
    $places = implode("|", $placesArray);
    // add_rewrite_rule('menu/.*/([0-9]+)?$', 'index.php?post_type=menu&p=$matches[1]', 'top');
    add_rewrite_rule('menu\/([A-Za-z0-9\-]+)?\/([0-9]+)?$', 'index.php?post_type=menu&p=$matches[2]', 'top');
    add_rewrite_rule('menu\/(?!.*' . $places . ')([A-Za-z0-9\-]+)?\/?(page\/)?([0-9]+)?\/?$', 'index.php?paged=$matches[3]&locationcat=$matches[1]', 'top');
    add_rewrite_rule('menu\/([A-Za-z0-9\-]+)?\/?(page\/)?([0-9]+)?\/?$', 'index.php?paged=$matches[3]&menucat=$matches[1]', 'top');
    add_rewrite_rule('menu\/([A-Za-z0-9\-]+)?\/([A-Za-z0-9\-]+)?\/?(page\/)?([0-9]+)?\/?$', 'index.php?paged=$matches[4]&locationcat=$matches[1]&menucat=$matches[2]', 'top');
}
add_action('init', 'menu_rewrites_init');

// make taxonomy
add_action('init', 'create_locationcat_taxonomy', '0');
function create_locationcat_taxonomy()
{
    $taxonomylabels = array(
        'name' => _x('locationcat', 'post type general name'),
        'singular_name' => _x('locationcat', 'post type singular name'),
        'search_items' => __('locationcat'),
        'all_items' => __('locationcat'),
        'parent_item' => __('Parent Cat'),
        'parent_item_colon' => __('Parent Cat:'),
        'edit_item' => __('Cat記事を編集'),
        'add_new_item' => __('Cat記事を書く'),
        'menu_name' => __('LOCATIONカテゴリー'),
    );
    $args = array(
        'labels' => $taxonomylabels,
        'hierarchical' => true,
        'has_archive' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'menu'),
    );
    register_taxonomy('locationcat', 'menu', $args);
}
add_action('init', 'create_menucat_taxonomy', '0');
function create_menucat_taxonomy()
{
    $taxonomylabels = array(
        'name' => _x('menucat', 'post type general name'),
        'singular_name' => _x('menucat', 'post type singular name'),
        'search_items' => __('menucat'),
        'all_items' => __('menucat'),
        'parent_item' => __('Parent Cat'),
        'parent_item_colon' => __('Parent Cat:'),
        'edit_item' => __('Cat記事を編集'),
        'add_new_item' => __('Cat記事を書く'),
        'menu_name' => __('MENUカテゴリー'),
    );
    $args = array(
        'labels' => $taxonomylabels,
        'hierarchical' => true,
        'has_archive' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array(
                'with_front' => false
            )
    );
    register_taxonomy('menucat', 'menu', $args);
}

// Rewrite Custom Taxonomy to share base slug with Custom Post Type
function rewrite_menu_category()
{
    $menu_category_args = get_taxonomy('locationcat'); // returns an object

    $menu_category_args->show_admin_menu = true;
    $menu_category_args->rewrite['slug'] = 'menu';
    $menu_category_args->rewrite['with_front'] = false;

    register_taxonomy('locationcat', 'menu', (array) $menu_category_args);
}
add_action('init', 'rewrite_menu_category', 11);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...