Opened 15 years ago
Closed 15 years ago
#16385 closed defect (bug) (wontfix)
Catchable fatal error in WP 3.1 RC3 - echo get_category_link
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Milestone: | Priority: | normal | |
| Severity: | normal | Version: | 3.1 |
| Component: | General | Keywords: | reporter-feedback needs-investigating |
| Focuses: | Cc: |
Description
I have in index.php the line 6:
<a href="<?php echo get_category_link(get_theme_mod('featured')); ?>"><?php echo cat_id_to_name(get_theme_mod('featured')); ?></a>
In Wordpres 3.0.4 works perfect, but in WordPress 3.1 RC3:
Catchable fatal error: Object of class WP_Error could not be converted to string in C:\wamp\www\wordpress\wp-content\themes\cvasi-magazine\index.php on line 6
Change History (13)
#1
@
15 years ago
- Milestone Awaiting Review deleted
- Resolution set to duplicate
- Status changed from new to closed
#2
follow-up:
↓ 3
@
15 years ago
Actually, not 100% sure this is a duplicate, but sounds damn close to it..
It sounds like get_theme_mod('featured') is returning either
- a non-integer
- an integer, but not the id of a category.
Eitherway, You need to account for the fact that get_category_link MAY return a WP_Error object in the event the input is not correct.
#3
in reply to:
↑ 2
@
15 years ago
The input is correct. Like I sad, in wp 3.0.4 is working perfect. I just switch to wp 3.1.
So your comment is shallow. This is a bug. Of course, 3.1.1 comes after 3.1, 3.1.2 comes after 3.1.1 and so.
#4
follow-up:
↓ 5
@
15 years ago
so your comment is shallow.
Your bug report is shallow. We can all play that game.
The fact still remains, WP_Error is a valid return from this function, Regardless of if this is a core problem, You'll still need to change that code to prevent it in the future.
What is the return value of get_theme_mod('featured')?
What about the error contents? (var_dump(get_category_link(get_theme_mod('featured')));)
#5
in reply to:
↑ 4
@
15 years ago
For get_theme_mod('featured') -
Not name of category, just link "Read more from..." and link goes in the same place (index.php).
Also the category name from top of posts box disappeared.
For (var_dump(get_category_link(get_theme_mod('featured')));) -
array(1) { invalid_term?=> array(1) { [0]=> string(10) "Empty Term" } } error_data?=> array(0) { } }
#6
@
15 years ago
So, What's the return value of get_theme_mod('featured')? ie. var_dump(get_theme_mod('featured'));
#7
@
15 years ago
Once you've got the return value of that, Hit your themes admin page and re-save it's settings, See if that fixes it.
#8
@
15 years ago
- Keywords reporter-feedback needs-investigating added; Catchable fatal error echo get_category_link removed
- Milestone set to 3.1
- Resolution duplicate deleted
- Status changed from closed to reopened
Moving to 3.1 as this is concerning. We need feedback here though.
#9
@
15 years ago
- Cc westi added
Unless we have somehow broken get_theme_mod during 3.1 I'm not sure I see a bug here.
Previously get_category_link was slightly more lenient in that it would blindly trust the ID you passed in if pretty permalinks were not enabled.
WP_Error has always been a possible return from get_category_link.
Have you got pretty permalinks enabled or are you using query string style urls?
#10
@
15 years ago
The permalinks is set to /%category%/%postname%/. Anyway, I just upgraded to 3.1 from 3.0.4. I installed another wp 3.1 in my wamp and... the same results.
Another example:
<div id="homepageleft">
<div class="hpfeatured">
<h3><?php echo cat_id_to_name(get_theme_mod('featured_top_left')); ?></h3>
<?php $recent = new WP_Query("cat=".get_theme_mod('featured_top_left')."&showposts=".get_theme_mod('featured_top_left_num')); while($recent->have_posts()) : $recent->the_post();?>
<?php if( get_post_meta($post->ID, "thumb", true) ): ?>
<a href="<?php the_permalink() ?>" rel="bookmark"><img class="thumb" src="<?php bloginfo('template_directory'); ?>/tools/timthumb.php?src=<?php echo get_post_meta($post->ID, "thumb", $single = true); ?>&h=<?php echo get_theme_mod('featured_top_left_thumb_height'); ?>&w=<?php echo get_theme_mod('featured_top_left_thumb_width'); ?>&zc=1" alt="<?php the_title(); ?>" /></a>
<?php else: ?>
<?php endif; ?>
<strong><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></strong>
<?php the_content_limit(80, ""); ?>
<hr/>
<?php endwhile; ?>
<?php $cat = get_category(get_theme_mod('featured_top_left')); ?>
'''Line 40: '''
<strong><a href="<?php echo get_category_link(get_theme_mod('featured_top_left')); ?>" rel="bookmark"><?php echo __("Read More Posts From ", 'studiopress')." ".$cat->name; ?></a></strong>
</div>
</div>
Results: "Catchable fatal error: Object of class WP_Error could not be converted to string in C:\wamp\www\wordpress\wp-content\themes\church\home.php on line 40"
Try the Church theme from Studio Press and Fashion Pro from Theme Junkie!
#11
@
15 years ago
3.0.4, When passed invalid data (ie. null/false) when running without rewrite, it'll will create a link as such: 'http://...../?cat='. When running with rewrite it'll Catchable error. As expected, Works with valid data (ie. '1');
Upgrade to 3.1; When presented with valid data, it continues to work, give it invalid data, or a non-set theme mod, and it fails.
I've tested it, get_theme_mod() is persisting on the upgrade, However this was tested with TwentyTen.
vasylesku: As those are both Premium themes, I'm unable to test or confirm if they trigger any bugs.
I'll echo my previous statement:
So, What's the return value of
get_theme_mod('featured')? ie.var_dump(get_theme_mod('featured'));
Or in this case, var_dump(get_theme_mod('featured_top_left'));
#13
@
15 years ago
- Milestone 3.1 deleted
- Resolution set to wontfix
- Status changed from reopened to closed
Passing a blank string:
var_dump( get_category_link("") );
WordPress 3.0.4, default permalinks:
string(21) "http://wp30.dev/?cat="
WordPress 3.0.4, pretty permalinks:
object(WP_Error)#78 (2) { errors?=> array(1) { invalid_term?=> array(1) { [0]=> string(10) "Empty Term" } } error_data?=> array(0) { } }
WordPress 3.1, default permalinks:
object(WP_Error)#181 (2) { errors?=> array(1) { invalid_term?=> array(1) { [0]=> string(10) "Empty Term" } } error_data?=> array(0) { } }
WordPress 3.1, pretty permalinks:
object(WP_Error)#181 (2) { errors?=> array(1) { invalid_term?=> array(1) { [0]=> string(10) "Empty Term" } } error_data?=> array(0) { } }
The only difference is that passing a blank string on a site with default permalinks now generates a WP_Error, whereas before it passed a malformed URL. The new behavior is more consistent with sites that have pretty permalinks enabled.