Make WordPress Core

Opened 3 years ago

Last modified 3 years ago

#54525 new enhancement

URL Object

Reported by: grosfaignan's profile grosfaignan Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: General Keywords:
Focuses: Cc:

Description

hi

i would to suggest to wordpress to build a wordpress URL_Object who implement url distribution logic like theses.

example : this url : " http://localhost/author/admin/

{
    base_url : http://localhost/author/admin/
    protocol : http
    root : localhost
    full_path:author/admin/
    template : author.php
    /**...some stuff*/
    {child
        path:author
        path_type:users_list
        {child
            path:admin
            path_type:user_name
            {user_object:WP_user
                /*...data from WP_user*/
            }
        }
    }
}


another example with this url : “ http://localhost/2021/10/20/my_comment/ "(a comment url)

{
    base_url : http://localhost/2021/10/20/my_comment/
    protocol : http
    root : localhost
    full_path:2021/10/20/my_comment/
    template : comments.php
    /**...some stuff*/
    {child
        path:2021
        path_type:date(year)
        {child
            path:10
            path_type:date(month)
            {child
                path:20
                path_type:date(day)
                {comment_object:WP_Comment
                    /*...data from WP_Comment like*/
                    comment_ID:""
                    comment_post_ID :""
                    comment_author :""
                    comment_author_email :""
                    /***...and more */
                }
            }
        }
    }
}

another example with this url : http://localhost/vehicle/car/

{
    base_url : http://localhost/vehicle/car/
    protocol : http
    root : localhost
    full_path:vehicle/car/
    template : category.php
    /**...some stuff*/
    {child
        path:vehicle
        path_type:category
        parent_category:none
        {child
            path:car
            path_type:category
            parent_category:vehicle
            {object_array
                /*...listed object for this category*/
                {object_1:car_with_4_wheels
                     /*object fields and data */
                    color:""
                    wheels:""
                    type:""
                    motor:""
                    gear_ratio:""
                    /**...and more*/
                }
                {object_2:car_with_3_wheels}
                {object_3:car_with_5_wheels}

                /***...and more */
            }
        }
    }
}

the underlying idea is to give us the possibility to know where url part come from, to make more flexible and logic routing.

to explain a little bit my purpose , we will move to : http://localhost/vehicle/car/my_black_car_with_four_wheels

we can get this object :

{
    base_url : http://localhost/vehicle/car/
    protocol : http
    root : localhost
    full_path:vehicle/car/
    template : category.php
    /**...some stuff*/
    {child
        path:vehicle
        path_type:category
        parent_category:none
        {child
            path:car
            path_type:category
            parent_category:vehicle
            {object:car_object
                /*object fields and data */
                color:black
                wheels:4
                type:sportive
                motor:950ch
                gear_ratio:6
                /**...and more*/
            }
        }
    }
}

in addition, the possibilites to create wordpress routing from this object will be a good idea. i'll try to give you an example : we want to create a user car space with this url format :
http://localhost/user/vehicle/cars

/**first we will create this object*/
$my_url_object = new url_object(/${root}/${users}/${category:vehicle}/${category:cars});

this action will instantiate the url object and the routing logic at the same time, so we will get this url_object

{
    base_url : http://localhost/user/vehicle/car
    protocol : http (will depends form the server config)
    root : localhost
    template : ""
    /**...some stuff*/
    {child
        path:user
        {user_object:WP_user
            /**data from WP_user */
            data:""
            ID:""
            caps:""
            roles:""
            /**... and more */
        }
        {child
            path:vehicle
            {category_object : vehicle
                /**data from vehicle object */
            }
            {child
                path:car
                {category_object:car
                    /**data from car object */
                    /**for example:*/
                    color:""
                    wheels:""
                    type:""
                    wheels_size:""
                    motor:""
                    gear_ratio:""
                    /**...and more*/
                }
            }
        }

    }
    
}

the only last thing we have to do is to decide which template will be used:

$my_url_object->set_template(user_car.php)

Change History (2)

#1 @SergeyBiryukov
3 years ago

Hi there, welcome back to WordPress Trac! Thanks for the ticket.

Just linking to some potentially related tickets here: #12935, #18276, #36292, #41145.

#2 @grosfaignan
3 years ago

the actual problem in wordpress is when we catch any url, we can't know how it was build by wordpress-core.
by the way, if we catch an url like " http://localhost/supersonic " we can't use this url to make a real routing, because we don't know how wordpress have build it.
So we can't know if " /supersonic" refer to a user_name, tu a user_product, to a category, or to any other item.

convertly if in the url object we could get something like:

/**...*/
path: "supersonic" => refer_to: WP_user //for example

we could make routing more efficiently

Last edited 3 years ago by grosfaignan (previous) (diff)
Note: See TracTickets for help on using tickets.