[wp-hackers] wp releases : is it planned in any way ?

Jacob Santos wordpress at santosj.name
Fri Sep 12 13:16:41 GMT 2008


Ah, I like to think of the WordPress API as a black box in which my 
solutions do not involve modifying the core purpose of WordPress 
functions to serve my ends. In programming, you are not always going to 
have the advantage of being able to modify the library for which you 
use, therefore it makes for almost disappointing practice to assume that 
the author of the library you use will bow to your will, just because it 
will make your life easier.

After looking it over again, it would be super easy to include the 
taxonomy argument with little overhead and increase the power of a few 
relatively general purpose functions. I can then agree that I should 
withhold further judgment until I see a patch for which to critique. It 
is not the way I would have went about solving the problem if it was me, 
but I forget not everyone is a fan of torturing themselves.

Malaiac wrote:
> 2008/9/12, Jacob Santos <wordpress at santosj.name>:
>   
>> Of the 9 line function body, you only need 2 lines to create
>> your own function. I'm not sure where you are getting 2000 lines of code,
>> but forcing the core code to dance around your modifications is not
>> something I would be happy about without good enough reason.
>>     
> I don't need the modification to actually get the categories of my own
> taxonomy. I need the modification for all the other WP functions to
> get the categories of my own taxonomy.
>
> Without the mod, I'd have to recode one or two dozens of (big)
> functions which start by $categories = &get_categories($r); and do not
> apply filters on it. Maybe not 2 000 lines of code, but surely like a
> 40ko futile copy / paste of functions, and conditional tags in all the
> templates files ( if(is_directory()) my_list_categories($args); else
> wp_list_categories($args); ).
> Copy pasting is not above my level, and time is not an issue (find and
> replace 'category' => 'my_category' ). But adding 40k of code, and
> almost making a fork of major WP functions is an issue regarding speed
> and future maintenance.
>   

is_directory() actually does sound pretty good function. I would add a 
prefix to any function you create that is uniform for your plugin, 
myplugin_is_directory() and myplugin_my_list_categories().

>>  Functions of that limited purpose
>>     
> woosh. did you count the occurences of get_categories() calls (front
> and back ends)  ?
>   

I should have said, "specific purpose", which is to get the category 
taxonomy of /WordPress/, not every taxonomy in WordPress and plugins. If 
it won't be that much more to add the taxonomy to the argument and allow 
it to be used, it makes sense to want to allow those to be reused. Reuse 
is a programming concept I agree with.

>> get_terms() is well flexible enough to allow you enough freedom to
>> employ in any fashion to create your own function for what you have in mind.
>>     
> Well, I'd like all these major WP functions to know what I have in my
> mind, but well..

That doesn't sound like good development practices. There are many 
libraries that I wish would do thing differently, but hey, they aren't 
going to change just because of one punk guy saying, "You should allow 
unlimited or additional extensibility." It would make more sense to 
create a generic function which do the dropdown, because I believe there 
are several areas that offer that functionality.

So instead of widening the scope of specific functions for yet another 
purpose, you are bloating those functions. Then again, for performance 
reasons, in tests I've done creating another function to reduce 
redundancy ends up increasing overhead from PHP having to create the 
function stack, setup the variables and then exit the stack when complete.

I will say that the Plugin API has an upper limit of how many hooks that 
can be performed before it takes a full second to perform those actions. 
Depends on your system, but I do like my system because everything is 
slower and I can actually see how long functions take relative to each 
other. You might want to test the performance of your plugin, depending 
on the size of it.

Well, for performance reasons, you can still create the generic dropdown 
based on the code from categories, users, etc, but not use it in the 
WordPress API. Have it just for plugins.

>>  You can also create an wrapper around get_categories by using the 'include'
>> argument for get_categories(). If you get the IDs of the terms of your
>> taxonomy, you can include your specialized categories along with the
>> WordPress ones.
>>     
> my specialised categories don't mix with post categories. and fetching
> the correct ID for all categories call = twice the SQL load.
>   

Indeed. I remembered too late that the WHERE clause might also include 
the taxonomy.

>   
>>  You can also hook into the 'get_terms' filter and look for the 'category'
>> and 'link_category' taxonomies to add your taxonomy terms to.
>>     
> the get_terms filter is way too late in the function to do that. I
> mean, it is in the right position (just before the return), but it's
> after the query and after the sorting.
>
>   

It would be at a cost to have to go through all of the get_terms 
functionality just to replace it with your own. It would be easier and 
at a lower cost to simply pass the correct taxonomy to begin with.

>   
>>  I mean, I not
>> sure exactly what you are trying to achieve or how, but there are several
>> ways around not doing anything to get_categories().
>>     
>
> Well, after DD32 thoughtful reply, a simple filter addition would do
> the trick, without compromizing the code.
>
>   

Yeah, if your purpose is to make the other functions that use 
get_categories more general purpose, then it seems that the action you 
are preforming is one that is known before hand and can be passed as one 
of the arguments. No filter, just allow the taxonomy to be set within 
the $args parameter.

> Well I guess you have your answer now, don't you ?
>   
No, my limiting factor is that I'm a zealot for my programming paradigm. 
I don't agree with what you are trying to achieve based on one of my 
principles for programming. I don't do things, because I'm limited by my 
average IQ, well not always at least. I do it because I feel it is the 
right way to do it.

It would be nice if WordPress was more flexible, but it would be at the 
cost of time and performance. My fear is still that another is going to 
come along and soon this and that does this and also that as well as 
another several tasks it was not meant for.

The functions you point to are for presentation and in my programming 
paradigm it is acceptable to recreate new functions for your specific 
purpose or refactor existing presentation functions to allow for 
additional reuse. From what you described, to me the solution is either 
to 1) add filters to those dozen or so functions to allow for reuse (the 
negative impact of performance is justified by only having the filter 
where it is needed or 2) create a generic API for presentation layer and 
allow reuse of it instead.

You will notice that I don't mention get_categories(). There are 
disadvantages to everything. Mostly the time it will take increases with 
those two, your solution would probably take less than 30 minutes to 
complete whereas, the second solution would take several hours, plus 
additional time for testing and writing test cases. Those are my ideal 
solutions, but I doubt I'm going to implement them myself.

So you know, another one of my programming principles is that if you can 
do something in five minutes verses 8 hours, then I'm going to go with 
the five minutes solution first and put the "right" 4 to 8 hour solution 
on the back burner. But you know, it is the weekend coming up, so if you 
insult my intelligence further, I might just jump in to action to prove 
you wrong. Whether or not I succeed is really not the issue at that 
point. Also, probably not going to be committed since it would be an 
overwhelming change and it is a little late in the development cycle. It 
would take more debate than you know an additional three lines of code 
to get_categories().

Jacob Santos


More information about the wp-hackers mailing list