• Resolved SunriseCreative

    (@sunrisecreative)


    If I want to be able to edit the Meta widget in the sidebar, for example remove the link to the WordPress site or remove the comments RSS link, I know I can edit the wp-includes/default-widgets.php file but then when it comes to upgrading I’ll need to re-apply those changes, so is there a way of editing this area by adding some code within the theme directory, for example in functions.php?

Viewing 11 replies - 1 through 11 (of 11 total)
  • Thread Starter SunriseCreative

    (@sunrisecreative)

    I found someone to help me with this (thanks Adam) – I am posting the solution here in case anyone else is looking to do the same thing.

    In your child theme create a functions.php file and add the following code to it:

    <?php
    function remove_meta_widget() {
        unregister_widget('WP_Widget_Meta');
        register_widget('WP_Widget_Meta_Mod');
    }
    
    add_action( 'widgets_init', 'remove_meta_widget' );
    
    /**
     * Meta widget class
     *
     * Displays log in/out, RSS feed links, etc.
     *
     * @since 2.8.0
     */
    class WP_Widget_Meta_Mod extends WP_Widget {
    
    function __construct() {
    $widget_ops = array('classname' => 'widget_meta', 'description' => __( "Log in/out, admin, feed and WordPress links") );
    parent::__construct('meta', __('Meta'), $widget_ops);
    }
    
    function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title'], $instance, $this->id_base);
    
    echo $before_widget;
    if ( $title )
    echo $before_title . $title . $after_title;
    ?>
    <ul>
    <?php wp_register(); ?>
    <li><?php wp_loginout(); ?></li>
    <li><a href="<?php bloginfo('rss2_url'); ?>" title="<?php echo esc_attr(__('Syndicate this site using RSS 2.0')); ?>"><?php _e('Entries <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
    <li><a href="<?php bloginfo('comments_rss2_url'); ?>" title="<?php echo esc_attr(__('The latest comments to all posts in RSS')); ?>"><?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
    <li><a href="<?php esc_attr_e( 'http://wordpress.org/' ); ?>" title="<?php echo esc_attr(__('Powered by WordPress, state-of-the-art semantic personal publishing platform.')); ?>"><?php
    /* translators: meta widget link text */
    _e( 'WordPress.org' );
    ?></a></li>
    <?php wp_meta(); ?>
    </ul>
    <?php
    echo $after_widget;
    }
    
    function update( $new_instance, $old_instance ) {
    $instance = $old_instance;
    $instance['title'] = strip_tags($new_instance['title']);
    
    return $instance;
    }
    
    function form( $instance ) {
    $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
    $title = strip_tags($instance['title']);
    ?>
    <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p>
    <?php
    }
    }
    
    ?>

    This bit:

    function remove_meta_widget() {
    	unregister_widget('WP_Widget_Meta');

    unregisters the existing meta widget and this bit:

    register_widget('WP_Widget_Meta_Mod');

    registers a modified version of it. The contents of the new version are the rest of the code above. So to remove the link to the WordPress site for example you would simply remove this bit of code from your functions.php file:

    <li><a href="<?php esc_attr_e( 'http://wordpress.org/' ); ?>" title="<?php echo esc_attr(__('Powered by WordPress, state-of-the-art semantic personal publishing platform.')); ?>"><?php
    /* translators: meta widget link text */
    _e( 'WordPress.org' );
    ?></a></li>

    This is a great mod, so thank you. A couple of points.

    This mod worked “as is” in my child theme’s functions.php. I did take out more meta links than you did. This mod works with WP version 3.6.1. In fact the code is exactly the same.

    I did not cut and paste your code from above because I wanted the indentations in the code for readability, so I took code from the WP core wp-includes/default-widgets.php which has indentations. The content was identical.

    Thread Starter SunriseCreative

    (@sunrisecreative)

    Glad to hear it worked for you. Thanks for the feedback. 🙂

    Genius!!
    This is a great help.

    Many Thanks for sharing this.

    Hello

    While testing the live version of my website I discovered that a ‘Login’ link appears on my menu that I never added. When I clicked it (from a different computer but on the same Wi-Fi connection), I was taken to wp-login page. Whereas I was hoping this was the registration page for the users.

    My guess is that the root cause can be the WordPress Address (URL) and Website Address (URL) that can be found at Settings > General. In my case, it is the same: my domain.

    When I installed WordPress, (I think) it didn’t ask me where to install it.

    Currently WordPress and my theme share the same directory on my C-Panel: www.

    When I went to Appearance > Widgets I discovered Meta widget was not active: it was just in the Available Widgets area.

    I still clicked on it and changed the properties to Inactive Widgets. Then I checked by logging out of my account but the Log In link still appears.

    Then I discovered that when I make it inactive, a copy of it goes to the Inactive Widgets are but the original remains the same.
    Should I delete the Meta Widget? Or is there a way that to manually remove it?

    Please help me solve this problem.

    Thanks.

    Thread Starter SunriseCreative

    (@sunrisecreative)

    It depends on which theme you are using but if you have made the Meta widget inactive and the log in link is still visible then it might be because you have no active widgets at all. In some of the default themes the Meta widget will show up by default if you don’t have any active widgets.

    The log in link goes where it should do. At the bottom of the log in page there should be a link to the register page as well.

    If you need any more help please post a link to your website, let us know which theme you are using and which widgets you have made active.

    septillions.com is the address of my website.

    I am making it live for the next half an hour as it’s far from ready and I don’t want a potential customer to see it in this state (I have advertised its launch on social media.)

    I hope you won’t mind the time bar.

    Thanks for your help, sir.

    The developer says it’s not part of the theme. Which is correct as this link doesn’t appear anywhere in the theme.

    Please suggest a solution. This needs to be solved.

    It IS part of the theme. You can confirm this by temporarily switching to the default 2014 theme.

    You were right, Esmi. That link disappears when I switch themes. Thanks.

Viewing 11 replies - 1 through 11 (of 11 total)
  • The topic ‘Edit Meta Widget in Theme File’ is closed to new replies.