#23692 closed enhancement (fixed)
feed_links should have a parameter to choose which feed to display
Reported by: | Confridin | Owned by: | SergeyBiryukov |
---|---|---|---|
Milestone: | 4.4 | Priority: | normal |
Severity: | minor | Version: | |
Component: | Feeds | Keywords: | has-patch needs-docs good-first-bug |
Focuses: | docs | Cc: |
Description
Hello,
feed_links is a function located in wp_includes/general_template.php. It displays 2 feeds in the header : the main feed and the comment feed. The function is activated along with feed_links_extra when automatic-feed-links support is activated.
Currently, developers can't choose if they want both feeds to be displayed, or just one of them. I think this function should be improved.
Here is the current function :
function feed_links( $args = array() ) { if ( !current_theme_supports('automatic-feed-links') ) return; $defaults = array( /* translators: Separator between blog name and feed type in feed links */ 'separator' => _x('»', 'feed link'), /* translators: 1: blog title, 2: separator (raquo) */ 'feedtitle' => __('%1$s %2$s Feed'), /* translators: %s: blog title, 2: separator (raquo) */ 'comstitle' => __('%1$s %2$s Comments Feed'), ); $args = wp_parse_args( $args, $defaults ); echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['feedtitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link() . "\" />\n"; echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['comstitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link( 'comments_' . get_default_feed() ) . "\" />\n"; }
Currently, the only way to display only one feed (the main post feed or the main comment feed) so is to deactivate feed_links with :
remove_action('wp_head', 'feed_links', 2);
and then to create our own function to only display one feed.
Do you think this should be improved ?
Regards,
Attachments (5)
Change History (24)
#3
@
12 years ago
I think it could be improved this way :
// Default : add_theme_support( 'automatic-feed-links'); // only main feed add_theme_support( 'automatic-feed-links', true, false ); // only comment feed add_theme_support( 'automatic-feed-links', false, true); // new url for main feed add_theme_support( 'automatic-feed-links', 'http://website.com/new-feed-url', true); // new url for comment feed add_theme_support( 'automatic-feed-links', true, 'http://website.com/new-feed-url');
What do you think ?
#4
@
12 years ago
Hello i propose a simple filter :
function feed_links( $args = array() ) { if ( !current_theme_supports('automatic-feed-links') ) return; $defaults = array( /* translators: Separator between blog name and feed type in feed links */ 'separator' => _x('»', 'feed link'), /* translators: 1: blog title, 2: separator (raquo) */ 'feedtitle' => __('%1$s %2$s Feed'), /* translators: %s: blog title, 2: separator (raquo) */ 'comstitle' => __('%1$s %2$s Comments Feed'), ); $args = wp_parse_args( $args, $defaults ); $feed_and_coms = apply_filters( 'feed_links_types', 3 ); // 1 = feed, 2 = coms, 3 = both if( $feed_and_coms==1 || $feed_and_coms==3 ) echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['feedtitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link() . "\" />\n"; if( $feed_and_coms==2 || $feed_and_coms==3 ) echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr(sprintf( $args['comstitle'], get_bloginfo('name'), $args['separator'] )) . '" href="' . get_feed_link( 'comments_' . get_default_feed() ) . "\" />\n"; }
To show only feed :
add_filter( 'feed_links_types', 'baw_show_only_feed' ); function baw_show_only_feed(){ return 1; }
To show only coms :
add_filter( 'feed_links_types', 'baw_show_only_coms' ); function baw_show_only_feed(){ return 2; }
To show both, do nothing ;)
#6
follow-up:
↓ 7
@
12 years ago
The filter makes sense, however the values to check should be actual words (I'd suggest 'posts', 'comments', and 'all'), rather than numbers.
#7
in reply to:
↑ 6
@
12 years ago
Replying to SergeyBiryukov:
The filter makes sense, however the values to check should be actual words (I'd suggest 'posts', 'comments', and 'all'), rather than numbers.
Or it should filter an actual array of arguments, so one could set 'comments' => false. Or each feed can have its own filter.
#8
@
12 years ago
- Cc juliobosk@… added
@nacin : yes much better to filter an $args var. So, maybe 3.7 ? :]
#9
@
10 years ago
- Keywords has-patch added; needs-patch removed
- Owner set to joostdevalk
- Status changed from new to assigned
Just added a patch, with each feed having its own filter. Would appreciate a review :)
#10
@
10 years ago
My two pennies: I'd prefer Joost's patch as it'll be simpler in practical usage. See the below comparison of code needed to disable the comments feed.
Joost's patch:
add_filter( 'automatic_feed_links_show_comments_feed', '__return_false' );
Julio's patch:
add_filter( 'feed_links_types', 'my_feed_filter_function' ); function my_feed_filter_function( $array ) { $array['comments'] = false; return $array; }
#12
@
9 years ago
- Focuses docs added
- Keywords needs-patch added; has-patch removed
- Milestone changed from Awaiting Review to 4.4
New filters need to be documented as per the documentation standards.
#13
@
9 years ago
- Keywords has-patch needs-docs good-first-bug added; dev-feedback needs-patch removed
- Owner joostdevalk deleted
#14
@
9 years ago
23963.diff on the #23962 ticket, let's play a game x)
So my solution was pretty fine? Great news. You just changed the array type from keys to indexes, ok fine too.
Thank you for approving this and thanks to Daniel for his idea!
#15
@
9 years ago
I actually think general-template.patch would be easier to use, as demonstrated in comment:10.
#17
@
9 years ago
I still favor the filter @joostdevalk offers in this scenario. An obvious solution for most devs. The code abides.
to improve: