WordPress.org

Make WordPress Core

Ticket #42254: 42254.4.diff

File 42254.4.diff, 111.8 KB (added by birgire, 2 years ago)
  • src/wp-admin/includes/dashboard.php

    diff --git src/wp-admin/includes/dashboard.php src/wp-admin/includes/dashboard.php
    index 89047ba..b28d89b 100644
    function wp_dashboard_primary() { 
    13651365 * @param array  $feeds     Array of RSS feeds.
    13661366 */
    13671367function wp_dashboard_primary_output( $widget_id, $feeds ) {
    1368         foreach ( $feeds as $type => $args ) {
     1368
     1369        $displayed_links = array();
     1370        foreach ( (array) $feeds as $type => $args ) {
    13691371                $args['type'] = $type;
    13701372                echo '<div class="rss-widget">';
    1371                         wp_widget_rss_output( $args['url'], $args );
    1372                 echo "</div>";
     1373
     1374                $items = $args['items'];
     1375
     1376                // Extra offset to be able to handle possible duplicates,
     1377                // without affecting the actual number of displayed entries.
     1378                $args['items'] = $args['items'] + count( $displayed_links );
     1379
     1380                $rss_entries = wp_widget_rss_get_entries( $args['url'], $args );
     1381
     1382                if ( is_wp_error( $rss_entries ) ) {
     1383                        if ( is_admin() || current_user_can( 'manage_options' ) ) {
     1384                                echo '<p><strong>' . esc_html__( 'RSS Error:' ) . '</strong> ' . $rss_entries->get_error_message() . '</p>';
     1385                        }
     1386                        return;
     1387                }
     1388
     1389                if ( empty( $rss_entries ) ) {
     1390                        return;
     1391                }
     1392
     1393                if ( $items < 1 || 20 < $items ) {
     1394                        $items = 10;
     1395                }
     1396
     1397                $count = 0;
     1398
     1399                echo '<ul>';
     1400                foreach ( $rss_entries as $item ) {
     1401
     1402                        // Skip duplicate links.
     1403                        if ( in_array( $item['link'], $displayed_links, true ) ) {
     1404                                continue;
     1405                        }
     1406
     1407                        if ( '' === $item['link'] ) {
     1408                                echo "<li>{$item['title']}{$item['date']}{$item['summary']}{$item['author']}</li>";
     1409                        } elseif ( $item['summary'] ) {
     1410                                echo "<li><a class='rsswidget' href='{$item['link']}'>{$item['title']}</a>{$item['date']}{$item['summary']}{$item['author']}</li>";
     1411                        } else {
     1412                                echo "<li><a class='rsswidget' href='{$item['link']}'>{$item['title']}</a>{$item['date']}{$item['author']}</li>";
     1413                        }
     1414
     1415                        $count++;
     1416                        $displayed_links[] = $item['link'];
     1417
     1418                        if ( $items <= $count ) {
     1419                                break;
     1420                        }
     1421                }
     1422                echo '</ul>';
     1423
     1424                echo '</div>';
    13731425        }
    13741426}
    13751427
  • src/wp-includes/widgets.php

    diff --git src/wp-includes/widgets.php src/wp-includes/widgets.php
    index 3db5fb8..a3a56a4 100644
    function _wp_remove_unregistered_widgets( $sidebars_widgets, $whitelist = array( 
    13811381 * @param array $args Widget arguments.
    13821382 */
    13831383function wp_widget_rss_output( $rss, $args = array() ) {
     1384        if ( ! isset( $args['items'] ) || (int) $args['items'] < 1 || 20 < (int) $args['items'] ) {
     1385                $args['items'] = 10;
     1386        }
     1387
     1388        $rss_entries = wp_widget_rss_get_entries( $rss, $args );
     1389
     1390        if ( is_wp_error( $rss_entries ) ) {
     1391                if ( is_admin() || current_user_can( 'manage_options' ) ) {
     1392                        echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . $rss->get_error_message() . '</p>';
     1393                }
     1394                return;
     1395        }
     1396
     1397        if( empty( $rss_entries ) ) {
     1398                return;
     1399        }
     1400
     1401        echo '<ul>';
     1402        foreach ( $rss_entries as $item ) {
     1403
     1404                if ( '' === $item['link'] ) {
     1405                        echo "<li>{$item['title']}{$item['date']}{$item['summary']}{$item['author']}</li>";
     1406                } elseif ( $item['summary'] ) {
     1407                        echo "<li><a class='rsswidget' href='{$item['link']}'>{$item['title']}</a>{$item['date']}{$item['summary']}{$item['author']}</li>";
     1408                } else {
     1409                        echo "<li><a class='rsswidget' href='{$item['link']}'>{$item['title']}</a>{$item['date']}{$item['author']}</li>";
     1410                }
     1411        }
     1412        echo '</ul>';
     1413}
     1414
     1415/**
     1416 * Return the RSS entries in an array
     1417 *
     1418 * @since X.X.X
     1419 *
     1420 * @param string|array|object $rss  RSS url.
     1421 * @param array               $args Widget arguments.
     1422 */
     1423function wp_widget_rss_get_entries( $rss, $args = array() ) {
     1424
    13841425        if ( is_string( $rss ) ) {
    1385                 $rss = fetch_feed($rss);
    1386         } elseif ( is_array($rss) && isset($rss['url']) ) {
     1426                $rss = fetch_feed( $rss );
     1427        } elseif ( is_array( $rss ) && isset( $rss['url'] ) ) {
    13871428                $args = $rss;
    1388                 $rss = fetch_feed($rss['url']);
    1389         } elseif ( !is_object($rss) ) {
     1429                $rss = fetch_feed( $rss['url'] );
     1430        } elseif ( ! is_object( $rss ) ) {
    13901431                return;
    13911432        }
    13921433
    1393         if ( is_wp_error($rss) ) {
    1394                 if ( is_admin() || current_user_can('manage_options') )
    1395                         echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . $rss->get_error_message() . '</p>';
    1396                 return;
     1434        if ( is_wp_error( $rss ) ) {
     1435                return $rss;
    13971436        }
    13981437
    1399         $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0, 'items' => 0 );
     1438        $default_args = array(
     1439                'show_author'  => 0,
     1440                'show_date'    => 0,
     1441                'show_summary' => 0,
     1442                'items'        => 0,
     1443        );
    14001444        $args = wp_parse_args( $args, $default_args );
    14011445
    1402         $items = (int) $args['items'];
    1403         if ( $items < 1 || 20 < $items )
    1404                 $items = 10;
    14051446        $show_summary  = (int) $args['show_summary'];
    14061447        $show_author   = (int) $args['show_author'];
    14071448        $show_date     = (int) $args['show_date'];
     1449        $items         = (int) $args['items'];
    14081450
    1409         if ( !$rss->get_item_quantity() ) {
    1410                 echo '<ul><li>' . __( 'An error has occurred, which probably means the feed is down. Try again later.' ) . '</li></ul>';
     1451        if ( ! $rss->get_item_quantity() ) {
    14111452                $rss->__destruct();
    1412                 unset($rss);
    1413                 return;
     1453                unset( $rss );
     1454                return new WP_Error(
     1455                        'noitems',
     1456                        __( 'An error has occurred, which probably means the feed is down. Try again later.' )
     1457                );
    14141458        }
    14151459
    1416         echo '<ul>';
    1417         foreach ( $rss->get_items( 0, $items ) as $item ) {
     1460        $maxitems = $rss->get_item_quantity( $items );
     1461        $rss_entries = array();
     1462
     1463        foreach ( $rss->get_items( 0, $maxitems ) as $item ) {
    14181464                $link = $item->get_link();
    14191465                while ( stristr( $link, 'http' ) != $link ) {
    14201466                        $link = substr( $link, 1 );
    function wp_widget_rss_output( $rss, $args = array() ) { 
    14531499                $author = '';
    14541500                if ( $show_author ) {
    14551501                        $author = $item->get_author();
    1456                         if ( is_object($author) ) {
     1502                        if ( is_object( $author ) ) {
    14571503                                $author = $author->get_name();
    14581504                                $author = ' <cite>' . esc_html( strip_tags( $author ) ) . '</cite>';
    14591505                        }
    14601506                }
    14611507
    1462                 if ( $link == '' ) {
    1463                         echo "<li>$title{$date}{$summary}{$author}</li>";
    1464                 } elseif ( $show_summary ) {
    1465                         echo "<li><a class='rsswidget' href='$link'>$title</a>{$date}{$summary}{$author}</li>";
    1466                 } else {
    1467                         echo "<li><a class='rsswidget' href='$link'>$title</a>{$date}{$author}</li>";
    1468                 }
     1508                $rss_entries[] = array(
     1509                        'title'   => $title,
     1510                        'date'    => $date,
     1511                        'summary' => $summary,
     1512                        'author'  => $author,
     1513                        'link'    => $link,
     1514                );
     1515
    14691516        }
    1470         echo '</ul>';
     1517
    14711518        $rss->__destruct();
    1472         unset($rss);
     1519        unset( $rss );
     1520
     1521        return $rss_entries;
     1522
    14731523}
    14741524
    14751525/**
  • new file tests/phpunit/data/feeds/news/news.xml

    diff --git tests/phpunit/data/feeds/news/news.xml tests/phpunit/data/feeds/news/news.xml
    new file mode 100644
    index 0000000..725b5ef
    - +  
     1<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
     2        xmlns:content="http://purl.org/rss/1.0/modules/content/"
     3        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     4        xmlns:dc="http://purl.org/dc/elements/1.1/"
     5        xmlns:atom="http://www.w3.org/2005/Atom"
     6        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     7        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
     8        >
     9
     10<channel>
     11        <title>WordPress News</title>
     12        <atom:link href="https://wordpress.org/news/feed/" rel="self" type="application/rss+xml" />
     13        <link>https://wordpress.org/news</link>
     14        <description>WordPress News</description>
     15        <lastBuildDate>Thu, 26 Oct 2017 20:59:32 +0000</lastBuildDate>
     16        <language>en-US</language>
     17        <sy:updatePeriod>hourly</sy:updatePeriod>
     18        <sy:updateFrequency>1</sy:updateFrequency>
     19        <generator>https://wordpress.org/?v=4.9-beta4-42028</generator>
     20<site xmlns="com-wordpress:feed-additions:1">14607090</site>    <item>
     21                <title>2017 WordPress Survey and WordCamp US</title>
     22                <link>https://wordpress.org/news/2017/10/2017-wordpress-survey-and-wordcamp-us/</link>
     23                <pubDate>Thu, 26 Oct 2017 20:59:32 +0000</pubDate>
     24                <dc:creator><![CDATA[Josepha]]></dc:creator>
     25                                <category><![CDATA[Community]]></category>
     26                <category><![CDATA[Events]]></category>
     27
     28                <guid isPermaLink="false">https://wordpress.org/news/?p=5004</guid>
     29                <description><![CDATA[It’s time for the annual WordPress user and developer survey! If you’re a WordPress user, developer, or business owner, then we want your feedback. Just like previous years, we’ll share the data at the upcoming WordCamp US (WCUS). It only takes a few minutes to fill out the survey, which will provide an overview of [&#8230;]]]></description>
     30                                <content:encoded><![CDATA[<p>It’s time for the annual WordPress user and developer survey! If you’re a WordPress user, developer, or business owner, then we want your feedback. Just like previous years, we’ll share the data at the upcoming WordCamp US (WCUS).</p>
     31<p>It only takes a few minutes to <a href="http://wordpressdotorg.polldaddy.com/s/wordpress-2017-survey">fill out the survey</a>, which will provide an overview of how people use WordPress. </p>
     32<figure class="wp-block-image alignright" style="width:357px"><a href="https://2017.us.wordcamp.org/tickets/"><img src="https://i0.wp.com/wordpress.org/news/files/2017/10/header.jpg?resize=357%2C148&#038;ssl=1" data-recalc-dims="1" /></a><figcaption>WordCamp US in Nashville</figcaption></figure>
     33<p>The <a href="https://wordpress.tv/tag/state-of-the-word/">State of the Word</a> includes stats and an overview of what&#x27;s new in WordPress and is given every year at WCUS. Don&#x27;t forget that tickets are available <a href="https://2017.us.wordcamp.org">now</a> so you can join the excitement in Nashville this year!</p>
     34]]></content:encoded>
     35                <post-id xmlns="com-wordpress:feed-additions:1">5004</post-id>  </item>
     36                <item>
     37                <title>WordPress 4.9 Beta 4</title>
     38                <link>https://wordpress.org/news/2017/10/wordpress-4-9-beta-4/</link>
     39                <pubDate>Wed, 25 Oct 2017 07:04:47 +0000</pubDate>
     40                <dc:creator><![CDATA[Mel Choyce]]></dc:creator>
     41                                <category><![CDATA[Development]]></category>
     42                <category><![CDATA[Releases]]></category>
     43
     44                <guid isPermaLink="false">https://wordpress.org/news/?p=4962</guid>
     45                <description><![CDATA[WordPress 4.9 Beta 4 is now available! This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip). [&#8230;]]]></description>
     46                                <content:encoded><![CDATA[<p>WordPress 4.9 Beta 4 is now available!</p>
     47<p><strong>This software is still in development,</strong> so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the <a href="https://wordpress.org/plugins/wordpress-beta-tester/">WordPress Beta Tester</a> plugin (you’ll want “bleeding edge nightlies”). Or you can <a href="https://wordpress.org/wordpress-4.9-beta4.zip">download the beta here</a> (zip).</p>
     48<p>For more information on what’s new in 4.9, check out the <a href="https://wordpress.org/news/2017/10/wordpress-4-9-beta-1/">Beta 1</a> blog post. Since the Beta 1 release, we’ve made <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41846&amp;stop_rev=41777&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">70 changes</a> in Beta 2, and <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41938&amp;stop_rev=41847&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">92 changes</a> in <a href="https://wordpress.org/news/2017/10/wordpress-4-9-beta-3/">Beta 3</a>. In Beta 4, we&#8217;ve made <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=42020&amp;stop_rev=41940&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">80 changes</a>, focusing on bug fixes and finalizing new features.</p>
     49<p>Do you speak a language other than English? <a href="https://translate.wordpress.org/projects/wp/dev">Help us translate WordPress into more than 100 languages!</a></p>
     50<p><strong>If you think you’ve found a bug</strong>, you can post to the <a href="https://wordpress.org/support/forum/alphabeta">Alpha/Beta area</a> in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, <a href="https://make.wordpress.org/core/reports/">file one on WordPress Trac</a>, where you can also find <a href="https://core.trac.wordpress.org/tickets/major">a list of known bugs</a>.</p>
     51<p><i>Beta 4 at last,<br />
     52RC 1 draws ever near.<br />
     53Let&#8217;s make it bug-free. <img src="https://s.w.org/images/core/emoji/2.3/72x72/1f41b.png" alt="🐛" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/2.3/72x72/1f6ab.png" alt="🚫" class="wp-smiley" style="height: 1em; max-height: 1em;" /></i></p>
     54]]></content:encoded>
     55                <post-id xmlns="com-wordpress:feed-additions:1">4962</post-id>  </item>
     56                <item>
     57                <title>WordPress 4.9 Beta 3</title>
     58                <link>https://wordpress.org/news/2017/10/wordpress-4-9-beta-3/</link>
     59                <pubDate>Thu, 19 Oct 2017 05:18:09 +0000</pubDate>
     60                <dc:creator><![CDATA[Weston Ruter]]></dc:creator>
     61                                <category><![CDATA[Documentation]]></category>
     62                <category><![CDATA[Releases]]></category>
     63
     64                <guid isPermaLink="false">https://wordpress.org/news/?p=4953</guid>
     65                <description><![CDATA[WordPress 4.9 Beta 3 is now available! This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip). [&#8230;]]]></description>
     66                                <content:encoded><![CDATA[<p>WordPress 4.9 Beta 3 is now available!</p>
     67<p><strong>This software is still in development,</strong> so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the <a href="https://wordpress.org/plugins/wordpress-beta-tester/">WordPress Beta Tester</a> plugin (you’ll want “bleeding edge nightlies”). Or you can <a href="https://wordpress.org/wordpress-4.9-beta3.zip">download the beta here</a> (zip).</p>
     68<p>For more information on what’s new in 4.9, check out the <a href="https://wordpress.org/news/2017/10/wordpress-4-9-beta-1/">Beta 1</a> blog post. Since the Beta 1 release, we’ve made <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41846&amp;stop_rev=41777&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">70 changes</a> in Beta 2 and <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41938&amp;stop_rev=41847&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">92 changes</a> in Beta 3. A few of these newest changes to take note of in particular:</p>
     69<ul>
     70<li>The plugin/theme editors now show files in a scrollable expandable tree list. See <a href="https://core.trac.wordpress.org/ticket/24048">#24048</a>.</li>
     71<li>Backwards compatibility has been improved for MediaElement.js, which is upgraded from 2.2 to 4.2. See <a href="https://core.trac.wordpress.org/ticket/42189">#42189</a>.</li>
     72<li>When you create post stubs in the Customizer (such as for nav menu items, for the homepage or the posts page), if you then schedule your customized changes or save them as a draft, then these Customizer-created posts will appear in the admin as “Customization Drafts”; these drafts can be edited before your customized changes are published, at which time these posts (or pages) will also be automatically published. See <a href="https://core.trac.wordpress.org/ticket/42220">#42220</a>.</li>
     73<li>Theme browsing and installation experience in the Customizer has seen some bugfixes (e.g. <a href="https://core.trac.wordpress.org/ticket/42215">#42215</a> and <a href="https://core.trac.wordpress.org/ticket/42212">#42212</a>), with some known remaining issues outstanding <a href="https://core.trac.wordpress.org/ticket/42052">in Safari</a>.</li>
     74<li>There is now a callout on the dashboard to install and activate Gutenberg. See <a href="https://core.trac.wordpress.org/ticket/41316">#41316</a>.</li>
     75<li>Menus in the Customizer have seen additional usability improvements. See <a href="https://core.trac.wordpress.org/ticket/36279">#36279</a> and <a href="https://core.trac.wordpress.org/ticket/42114">#42114</a>.</li>
     76</ul>
     77<p>Do you speak a language other than English? <a href="https://translate.wordpress.org/projects/wp/dev">Help us translate WordPress into more than 100 languages!</a></p>
     78<p><strong>If you think you’ve found a bug</strong>, you can post to the <a href="https://wordpress.org/support/forum/alphabeta">Alpha/Beta area</a> in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, <a href="https://make.wordpress.org/core/reports/">file one on WordPress Trac</a>, where you can also find <a href="https://core.trac.wordpress.org/tickets/major">a list of known bugs</a>.</p>
     79<p><i>Many refinements<br />
     80Exist within this release;<br />
     81Can you find them all?</i></p>
     82]]></content:encoded>
     83                <post-id xmlns="com-wordpress:feed-additions:1">4953</post-id>  </item>
     84                <item>
     85                <title>WordPress 4.9 Beta 2</title>
     86                <link>https://wordpress.org/news/2017/10/wordpress-4-9-beta-2/</link>
     87                <pubDate>Thu, 12 Oct 2017 06:29:09 +0000</pubDate>
     88                <dc:creator><![CDATA[Mel Choyce]]></dc:creator>
     89                                <category><![CDATA[Development]]></category>
     90                <category><![CDATA[Releases]]></category>
     91
     92                <guid isPermaLink="false">https://wordpress.org/news/?p=4946</guid>
     93                <description><![CDATA[WordPress 4.9 Beta 2 is now available! This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip). [&#8230;]]]></description>
     94                                <content:encoded><![CDATA[<p>WordPress 4.9 Beta 2 is now available!</p>
     95<p><strong>This software is still in development,</strong> so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the <a href="https://wordpress.org/plugins/wordpress-beta-tester/">WordPress Beta Tester</a> plugin (you’ll want “bleeding edge nightlies”). Or you can <a href="https://wordpress.org/wordpress-4.9-beta2.zip">download the beta here</a> (zip).</p>
     96<p>For more information on what’s new in 4.9, check out the <a href="https://wordpress.org/news/2017/10/wordpress-4-9-beta-1/">Beta 1</a> blog post. Since then, we’ve made <a href="https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41846&amp;stop_rev=41777&amp;limit=100&amp;sfp_email=&amp;sfph_mail=">70 changes</a> in Beta 2.</p>
     97<p>Do you speak a language other than English? <a href="https://translate.wordpress.org/projects/wp/dev">Help us translate WordPress into more than 100 languages!</a></p>
     98<p><strong>If you think you’ve found a bug</strong>, you can post to the <a href="https://wordpress.org/support/forum/alphabeta">Alpha/Beta area</a> in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, <a href="https://make.wordpress.org/core/reports/">file one on WordPress Trac</a>, where you can also find <a href="https://core.trac.wordpress.org/tickets/major">a list of known bugs</a>.</p>
     99<p><em>Let’s test all of these:</em><br />
     100<em>code editing, theme switches,</em><br />
     101<em>widgets, scheduling.</em></p>
     102]]></content:encoded>
     103                <post-id xmlns="com-wordpress:feed-additions:1">4946</post-id>  </item>
     104                <item>
     105                <title>WordPress 4.9 Beta 1</title>
     106                <link>https://wordpress.org/news/2017/10/wordpress-4-9-beta-1/</link>
     107                <pubDate>Thu, 05 Oct 2017 05:54:02 +0000</pubDate>
     108                <dc:creator><![CDATA[Jeffrey Paul]]></dc:creator>
     109                                <category><![CDATA[Development]]></category>
     110                <category><![CDATA[Releases]]></category>
     111
     112                <guid isPermaLink="false">https://wordpress.org/news/?p=4926</guid>
     113                <description><![CDATA[WordPress 4.9 Beta 1 is now available! This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can [&#8230;]]]></description>
     114                                <content:encoded><![CDATA[<p>WordPress 4.9 Beta 1 is now available!</p>
     115<p><strong>This software is still in development,</strong> so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the <a href="https://wordpress.org/plugins/wordpress-beta-tester/">WordPress Beta Tester</a> plugin (you’ll want “bleeding edge nightlies”). Or you can <a href="https://wordpress.org/wordpress-4.9-beta1.zip">download the beta here</a> (zip).</p>
     116<p>WordPress 4.9 is slated for release on <a href="https://make.wordpress.org/core/4-9/">November 14</a>, but we need your help to get there. We’ve been working on making it even easier to customize your site. Here are some of the bigger items to test and help us find as many bugs as possible in the coming weeks:</p>
     117<ul>
     118<li>Drafting (<a href="https://core.trac.wordpress.org/ticket/39896">#39896</a>) and scheduling (<a href="https://core.trac.wordpress.org/ticket/28721">#28721</a>) of changes in the Customizer. Once you save or schedule a changeset, when any user comes into the Customizer the pending changes will be autoloaded. A button is provided to discard changes to restore the Customizer to the last published state. (This is a new “linear” mode for changesets, as opposed to “branching” mode which can be enabled by filter so that every time  user opens the Customizer a new blank changeset will be started.)</li>
     119<li>Addition of a frontend preview link to the Customizer to allow changes to be browsed on the frontend, even without a user being logged in (<a href="https://core.trac.wordpress.org/ticket/39896">#39896</a>).</li>
     120<li>Addition of autosave revisions in the Customizer (<a href="https://core.trac.wordpress.org/ticket/39275">#39275</a>).</li>
     121<li>A brand new theme browsing experience in the Customizer (<a href="https://core.trac.wordpress.org/ticket/37661">#37661</a>).</li>
     122<li>Gallery widget (<a href="https://core.trac.wordpress.org/ticket/41914">#41914</a>), following the media and image widgets introduced in 4.8.</li>
     123<li>Support for shortcodes in Text widgets (<a href="https://core.trac.wordpress.org/ticket/10457">#10457</a>).</li>
     124<li>Support for adding media to Text widgets (<a href="https://core.trac.wordpress.org/ticket/40854">#40854</a>).</li>
     125<li>Support for adding oEmbeds outside post content, including Text widgets (<a href="https://core.trac.wordpress.org/ticket/34115">#34115</a>).</li>
     126<li>Support for videos from providers other than YouTube and Vimeo in the Video widget (<a href="https://core.trac.wordpress.org/ticket/42039">#42039</a>)</li>
     127<li>Improve the flow for creating new menus in the Customizer (<a href="https://core.trac.wordpress.org/ticket/40104">#40104</a>).</li>
     128<li>Educated guess mapping of nav menus and widgets when switching themes (<a href="https://core.trac.wordpress.org/ticket/39692">#39692</a>).</li>
     129<li>Plugins: Introduce singular capabilities for activating and deactivating individual plugins (<a href="https://core.trac.wordpress.org/ticket/38652">#38652</a>).</li>
     130<li>Sandbox PHP file edits in both plugins and themes, without auto-deactivation when an error occurs; a PHP edit that introduces a fatal error is rolled back with an opportunity then for the user to fix the error and attempt to re-save. (<a href="https://core.trac.wordpress.org/ticket/21622">#21622</a>).</li>
     131<li>Addition of dirty state for widgets on the admin screen, indicating when a widget has been successfully saved and showing an “Are you sure?” dialog when attempting to leave without saving changes. (<a href="https://core.trac.wordpress.org/ticket/23120">#23120</a>, <a href="https://core.trac.wordpress.org/ticket/41610">#41610</a>)</li>
     132</ul>
     133<p>As always, there have been exciting changes for developers to explore as well, such as:</p>
     134<ul>
     135<li>CodeMirror editor added to theme/plugin editor, Custom CSS in Customizer, and Custom HTML widgets. Integration includes support for linters to catch errors before you attempt to save. Includes new APIs for plugins to instantiate editors. (<a href="https://core.trac.wordpress.org/ticket/12423">#12423</a>)</li>
     136<li>Introduction of an extensible code editor control for adding instances of CodeMirror to the Customizer. (<a href="https://core.trac.wordpress.org/ticket/41897">#41897</a>)</li>
     137<li>Addition of global notifications area (<a href="https://core.trac.wordpress.org/ticket/35210">#35210</a>), panel and section notifications (<a href="https://core.trac.wordpress.org/ticket/38794">#38794</a>), and a notification overlay that takes over the entire screen in the Customizer (<a href="https://core.trac.wordpress.org/ticket/37727">#37727</a>).</li>
     138<li>A date/time control in the Customizer (<a href="https://core.trac.wordpress.org/ticket/42022">#42022</a>).</li>
     139<li>Improve usability of Customize JS API (<a href="https://core.trac.wordpress.org/ticket/42083">#42083</a>, <a href="https://core.trac.wordpress.org/ticket/37964">#37964</a>, <a href="https://core.trac.wordpress.org/ticket/36167">#36167</a>).</li>
     140<li>Introduction of control templates for base controls (<a href="https://core.trac.wordpress.org/ticket/30738">#30738</a>).</li>
     141<li>Use WP_Term_Query when transforming tax queries (<a href="https://core.trac.wordpress.org/ticket/37038">#37038</a>).</li>
     142<li>Database: Add support for MySQL servers connecting to IPv6 hosts (<a href="https://core.trac.wordpress.org/ticket/41722">#41722</a>).</li>
     143<li>Emoji: Bring Twemoji compatibility to PHP (<a href="https://core.trac.wordpress.org/ticket/35293">#35293</a>). Test for any weirdness with emoji in RSS feeds or emails.</li>
     144<li>I18N: Introduce the Plural_Forms class (<a href="https://core.trac.wordpress.org/ticket/41562">#41562</a>).</li>
     145<li>Media: Upgrade MediaElement.js to 4.2.5-74e01a40 (<a href="https://core.trac.wordpress.org/ticket/39686">#39686</a>).</li>
     146<li>Media: Use max-width for default captions (<a href="https://core.trac.wordpress.org/ticket/33981">#33981</a>). We will want to make sure this doesn’t cause unexpected visual regressions in existing themes, default themes were all fine in testing.</li>
     147<li>Media: Reduce duplicated custom header crops in the Customizer (<a href="https://core.trac.wordpress.org/ticket/21819">#21819</a>).</li>
     148<li>Media: Store video creation date in meta (<a href="https://core.trac.wordpress.org/ticket/35218">#35218</a>). Please help test different kinds of videos.</li>
     149<li>Multisite: Introduce get_site_by() (<a href="https://core.trac.wordpress.org/ticket/40180">#40180</a>).</li>
     150<li>Multisite: Improve get_blog_details() by using get_site_by() (<a href="https://core.trac.wordpress.org/ticket/40228">#40228</a>).</li>
     151<li>Multisite: Improve initializing available roles when switch sites (<a href="https://core.trac.wordpress.org/ticket/38645">#38645</a>).</li>
     152<li>Multisite: Initialize a user&#8217;s roles correctly when setting them up for a different site (<a href="https://core.trac.wordpress.org/ticket/36961">#36961</a>).</li>
     153<li>REST API: Support registering complex data structures for settings and meta</li>
     154<li>REST API: Support for objects in schema validation and sanitization (<a href="https://core.trac.wordpress.org/ticket/38583">#38583</a>)</li>
     155<li>Role/Capability: Introduce capabilities dedicated to installing and updating language files (<a href="https://core.trac.wordpress.org/ticket/39677">#39677</a>).</li>
     156<li>Remove SWFUpload (<a href="https://core.trac.wordpress.org/ticket/41752">#41752</a>).</li>
     157<li>Users: Require a confirmation link in an email to be clicked when a user attempts to change their email address (<a href="https://core.trac.wordpress.org/ticket/16470">#16470</a>).</li>
     158<li>Core and the unit test suite is fully compatible with the upcoming release of PHP 7.2</li>
     159</ul>
     160<p>If you want a more in-depth view of what major changes have made it into 4.9, <a href="https://make.wordpress.org/core/tag/4-9/">check out posts tagged with 4.9 on the main development blog</a>, or look at a <a href="https://core.trac.wordpress.org/query?status=closed&amp;resolution=fixed&amp;milestone=4.9&amp;group=component&amp;order=priority">list of everything</a> that’s changed. There will be more developer notes to come, so keep an eye out for those as well.</p>
     161<p>Do you speak a language other than English? <a href="https://translate.wordpress.org/projects/wp/dev">Help us translate WordPress into more than 100 languages!</a></p>
     162<p><b>If you think you’ve found a bug</b>, you can post to the <a href="https://wordpress.org/support/forum/alphabeta">Alpha/Beta area</a> in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, <a href="https://make.wordpress.org/core/reports/">file one on WordPress Trac</a>, where you can also find <a href="https://core.trac.wordpress.org/tickets/major">a list of known bugs</a>.</p>
     163<p>Happy testing!</p>
     164<p><i>Without your testing,<br />
     165we might hurt the internet.<br />
     166Please help us find bugs.<img src="https://s.w.org/images/core/emoji/2.3/72x72/1f41b.png" alt="🐛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></i></p>
     167]]></content:encoded>
     168                <post-id xmlns="com-wordpress:feed-additions:1">4926</post-id>  </item>
     169                <item>
     170                <title>The Month in WordPress: September 2017</title>
     171                <link>https://wordpress.org/news/2017/10/the-month-in-wordpress-september-2017/</link>
     172                <pubDate>Mon, 02 Oct 2017 08:00:00 +0000</pubDate>
     173                <dc:creator><![CDATA[Hugh Lashbrooke]]></dc:creator>
     174                                <category><![CDATA[Month in WordPress]]></category>
     175
     176                <guid isPermaLink="false">https://wordpress.org/news/?p=4920</guid>
     177                <description><![CDATA[This has been an interesting month for WordPress, as a bold move on the JavaScript front brought the WordPress project to the forefront of many discussions across the development world. There have also been some intriguing changes in the WordCamp program, so read on to learn more about the WordPress community during the month of [&#8230;]]]></description>
     178                                <content:encoded><![CDATA[<p>This has been an interesting month for WordPress, as a bold move on the JavaScript front brought the WordPress project to the forefront of many discussions across the development world. There have also been some intriguing changes in the WordCamp program, so read on to learn more about the WordPress community during the month of September.</p>
     179<hr />
     180<h2>JavaScript Frameworks in WordPress</h2>
     181<p>Early in the month, <a href="https://ma.tt/2017/09/on-react-and-wordpress/">Matt Mullenweg announced</a> that WordPress will be switching away from React as the JavaScript library WordPress Core might use — this was in response to Facebook’s decision to keep a controversial patent clause in the library’s license, making many WordPress users uncomfortable.</p>
     182<p>A few days later, <a href="https://ma.tt/2017/09/facebook-dropping-patent-clause/">Facebook reverted the decision</a>, making React a viable option for WordPress once more. Still, the WordPress Core team is exploring a move <a href="https://github.com/WordPress/gutenberg/pull/2463">to make WordPress framework-agnostic</a>, so that the framework being used could be replaced by any other framework without affecting the rest of the project.</p>
     183<p>This is a bold move that will ultimately make WordPress core a lot more flexible, and will also protect it from potential license changes in the future.</p>
     184<p>You can get involved in the JavaScript discussion by joining the #core-js channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a> and following the <a href="https://make.wordpress.org/core/">WordPress Core development blog</a>.</p>
     185<h2>Community Initiative to Make WordCamps More Accessible</h2>
     186<p>A WordPress community member, Ines van Essen, started a new nonprofit initiative to offer financial assistance to community members to attend WordCamps. <a href="https://donatewc.org/">DonateWC</a> launched with a crowdsourced funding campaign to cover the costs of getting things up and running.</p>
     187<p>Now that she’s raised the initial funds, Ines plans to set up a nonprofit organization and use donations from sponsors to help people all over the world attend and speak at WordCamps.</p>
     188<p>If you would like to support the initiative, you can do so by <a href="https://donatewc.org/make-a-donation/">donating through their website</a>.</p>
     189<h2>The WordCamp Incubator Program Returns</h2>
     190<p>Following the success of <a href="https://make.wordpress.org/community/2017/06/30/wordcamp-incubator-report/">the first WordCamp Incubator Program</a>, the Community Team is <a href="https://make.wordpress.org/community/2017/09/27/wordcamp-incubator-program-v2-new-role-name/">bringing the program back</a> to assist more underserved cities in kick-starting their WordPress communities.</p>
     191<p>The program’s first phase aims to find community members who will volunteer to mentor, assist, and work alongside local leaders in the incubator communities — this is a time-intensive volunteer role that would need to be filled by experienced WordCamp organizers.</p>
     192<p>If you would like to be a part of this valuable initiative, join the #community-team channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a> and follow the <a href="https://make.wordpress.org/community/">Community Team blog</a> for updates.</p>
     193<h2>WordPress 4.8.2 Security Release</h2>
     194<p>On September 19, <a href="https://wordpress.org/news/2017/09/wordpress-4-8-2-security-and-maintenance-release/">WordPress 4.8.2 was released to the world</a> — this was a security release that fixed nine issues in WordPress Core, making the platform more stable and secure for everyone.</p>
     195<p>To get involved in building WordPress Core, jump into the #core channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a>, and follow <a href="https://make.wordpress.org/core/">the Core team blog</a>.</p>
     196<hr />
     197<h2>Further Reading:</h2>
     198<ul>
     199<li>The WordPress Meetup program hit a significant milestone this month — there are now 500 meetup groups in <a href="https://www.meetup.com/pro/wordpress/">the official chapter program</a>.</li>
     200<li>The SWFUpload library <a href="https://make.wordpress.org/core/2017/09/07/removing-swfupload/">will be removed from WordPress Core</a> in version 4.9, scheduled for release in mid-November.</li>
     201<li>Matías Ventura put together some useful videos on <a href="https://make.wordpress.org/core/2017/08/31/gutenberg-themes/">how theme developers can integrate Gutenberg into their work</a>.</li>
     202<li><a href="http://applyfilters.fm/"><i>Apply Filters</i></a>, the popular WordPress development podcast, will go on hiatus after the upcoming 83rd episode.</li>
     203<li>The WordPress Plugin Directory <a href="https://make.wordpress.org/plugins/2017/09/04/plugin-support-reps/">has added the ability</a> for plugin owners to assign plugin support representatives.</li>
     204<li>After a couple of slower development weeks, <a href="https://make.wordpress.org/core/2017/09/27/whats-new-in-gutenberg-1-2-1/">Gutenberg v1.2 is out</a> and it’s looking better than ever.</li>
     205<li>The third <a href="https://wordpress.org/news/2017/09/global-wordpress-translation-day-3/">Global WordPress Translation Day</a> took place this past weekend — keep an eye on <a href="https://make.wordpress.org/polyglots/">the Polyglots team blog</a> for updates.</li>
     206</ul>
     207<p><em>If you have a story we should consider including in the next “Month in WordPress” post, please <a href="https://make.wordpress.org/community/month-in-wordpress-submissions/">submit it here</a>.</em></p>
     208]]></content:encoded>
     209                <post-id xmlns="com-wordpress:feed-additions:1">4920</post-id>  </item>
     210                <item>
     211                <title>Global WordPress Translation Day 3</title>
     212                <link>https://wordpress.org/news/2017/09/global-wordpress-translation-day-3/</link>
     213                <pubDate>Wed, 27 Sep 2017 11:56:59 +0000</pubDate>
     214                <dc:creator><![CDATA[Hugh Lashbrooke]]></dc:creator>
     215                                <category><![CDATA[Events]]></category>
     216                <category><![CDATA[global wordpress translation day]]></category>
     217                <category><![CDATA[polyglots]]></category>
     218
     219                <guid isPermaLink="false">https://wordpress.org/news/?p=4915</guid>
     220                <description><![CDATA[On September 30 2017, the WordPress Polyglots Team &#8211; whose mission is to translate WordPress into as many languages as possible &#8211; will hold its third Global WordPress Translation Day, a 24-hour, round-the-clock, digital and physical global marathon dedicated to the localisation and internationalisation of the WordPress platform and ecosystem, a structure that powers, today, [&#8230;]]]></description>
     221                                <content:encoded><![CDATA[<p><span style="font-weight: 400">On September 30 2017, the WordPress Polyglots Team &#8211; whose mission is to translate WordPress into as many languages as possible &#8211; will hold its third <a href="https://wptranslationday.org/">Global WordPress Translation Day</a>, a 24-hour, round-the-clock, digital and physical global marathon dedicated to the localisation and internationalisation of the WordPress platform and ecosystem, a structure that powers, today, over 28% of all existing websites.</span></p>
     222<p><span style="font-weight: 400">The localisation process allows for WordPress and for all WordPress-related products (themes and plugins) to be available in local languages, so to improve their accessibility and usage and to allow as many people as possible to take advantage of the free platform and services available.</span></p>
     223<p><span style="font-weight: 400">In a (not completely) serendipitous coincidence, September 30 has also been declared by the United Nations “International Translation Day”, to pay homage to the great services of translators everywhere, one that allows communication and exchange.</span></p>
     224<p><span style="font-weight: 400">The event will feature a series of multi-language live speeches (training sessions, tutorials, case histories, etc.) that will be screen-casted in streaming, starting from Australia and the Far East and ending in the Western parts of the United States.</span></p>
     225<p><span style="font-weight: 400">In that same 24-hour time frame, Polyglots worldwide will gather physically in local events, for dedicated training and translations sprints (and for some fun and socializing as well), while those unable to physically join their teams will do so remotely.</span></p>
     226<p><span style="font-weight: 400">A big, fun, useful and enlightening party and a lovely mix of growing, giving, learning and teaching, to empower, and cultivate, and shine.</span></p>
     227<p><span style="font-weight: 400">Here are some stats about the first two events:</span></p>
     228<p><b>Global WordPress Translation Day 1</b></p>
     229<ul>
     230<li><span style="font-weight: 400">   </span><span style="font-weight: 400">448 translators worldwide</span></li>
     231<li><span style="font-weight: 400">   </span><span style="font-weight: 400">50 local events worldwide</span></li>
     232<li><span style="font-weight: 400">   </span><span style="font-weight: 400">54 locales involved</span></li>
     233<li><span style="font-weight: 400">   </span><span style="font-weight: 400">40350 strings translated, in</span></li>
     234<li><span style="font-weight: 400">   </span><span style="font-weight: 400">597 projects</span></li>
     235</ul>
     236<p><b>Global WordPress Translation Day 2</b></p>
     237<ul>
     238<li><span style="font-weight: 400">   </span><span style="font-weight: 400">780 translators worldwide</span></li>
     239<li><span style="font-weight: 400">   </span><span style="font-weight: 400">67 local events worldwide</span></li>
     240<li><span style="font-weight: 400">   </span><span style="font-weight: 400">133 locales involved</span></li>
     241<li><span style="font-weight: 400">   </span><span style="font-weight: 400">60426 strings translated, in</span></li>
     242<li><span style="font-weight: 400">   </span><span style="font-weight: 400">590 projects</span></li>
     243</ul>
     244<p><span style="font-weight: 400">We would like your help in spreading this news and in reaching out to all four corners of the world to make the third #WPTranslationDay a truly amazing one and to help celebrate the unique and fundamental role that translators have in the Community but also in all aspects of life.</span></p>
     245<p><span style="font-weight: 400">A full press release is available, along with more information and visual assets at </span><a href="https://wptranslationday.org/press/"><span style="font-weight: 400">wptranslationday.org/press</span></a>.</p>
     246<p><span style="font-weight: 400">For any additional information please don’t hesitate to contact the event team on </span><a href="mailto:press@wptranslationday.org"><span style="font-weight: 400">press@wptranslationday.org</span></a><span style="font-weight: 400">.</span></p>
     247]]></content:encoded>
     248                <post-id xmlns="com-wordpress:feed-additions:1">4915</post-id>  </item>
     249                <item>
     250                <title>WordPress 4.8.2 Security and Maintenance Release</title>
     251                <link>https://wordpress.org/news/2017/09/wordpress-4-8-2-security-and-maintenance-release/</link>
     252                <pubDate>Tue, 19 Sep 2017 22:17:15 +0000</pubDate>
     253                <dc:creator><![CDATA[Aaron D. Campbell]]></dc:creator>
     254                                <category><![CDATA[Releases]]></category>
     255                <category><![CDATA[Security]]></category>
     256
     257                <guid isPermaLink="false">https://wordpress.org/news/?p=4909</guid>
     258                <description><![CDATA[WordPress 4.8.2 is now available. This is a security release for all previous versions and we strongly encourage you to update your sites immediately. WordPress versions 4.8.1 and earlier are affected by these security issues: $wpdb-&#62;prepare() can create unexpected and unsafe queries leading to potential SQL injection (SQLi). WordPress core is not directly vulnerable to this [&#8230;]]]></description>
     259                                <content:encoded><![CDATA[<p>WordPress 4.8.2 is now available. This is a <strong>security release</strong> for all previous versions and we strongly encourage you to update your sites immediately.</p>
     260<p>WordPress versions 4.8.1 and earlier are affected by these security issues:</p>
     261<ol>
     262<li><code>$wpdb-&gt;prepare()</code> can create unexpected and unsafe queries leading to potential SQL injection (SQLi). WordPress core is not directly vulnerable to this issue, but we&#8217;ve added hardening to prevent plugins and themes from accidentally causing a vulnerability. Reported by <a href="https://hackerone.com/slavco">Slavco</a></li>
     263<li>A cross-site scripting (XSS) vulnerability was discovered in the oEmbed discovery. Reported by xknown of the WordPress Security Team.</li>
     264<li>A cross-site scripting (XSS) vulnerability was discovered in the visual editor. Reported by <a href="https://twitter.com/brutelogic">Rodolfo Assis (@brutelogic)</a> of Sucuri Security.</li>
     265<li>A path traversal vulnerability was discovered in the file unzipping code. Reported by <a href="https://hackerone.com/noxrnet">Alex Chapman (noxrnet)</a>.</li>
     266<li>A cross-site scripting (XSS) vulnerability was discovered in the plugin editor. Reported by 陈瑞琦 (Chen Ruiqi).</li>
     267<li>An open redirect was discovered on the user and term edit screens. Reported by <a href="https://hackerone.com/ysx">Yasin Soliman (ysx)</a>.</li>
     268<li>A path traversal vulnerability was discovered in the customizer. Reported by Weston Ruter of the WordPress Security Team.</li>
     269<li>A cross-site scripting (XSS) vulnerability was discovered in template names. Reported by <a href="https://hackerone.com/sikic">Luka (sikic)</a>.</li>
     270<li>A cross-site scripting (XSS) vulnerability was discovered in the link modal. Reported by <a href="https://hackerone.com/qasuar">Anas Roubi (qasuar)</a>.</li>
     271</ol>
     272<p>Thank you to the reporters of these issues for practicing <a href="https://make.wordpress.org/core/handbook/testing/reporting-security-vulnerabilities/">responsible disclosure</a>.</p>
     273<p>In addition to the security issues above, WordPress 4.8.2 contains 6 maintenance fixes to the 4.8 release series. For more information, see the <a href="https://codex.wordpress.org/Version_4.8.2">release notes</a> or consult the <a href="https://core.trac.wordpress.org/query?status=closed&amp;milestone=4.8.2&amp;group=component&amp;col=id&amp;col=summary&amp;col=component&amp;col=status&amp;col=owner&amp;col=type&amp;col=priority&amp;col=keywords&amp;order=priority">list of changes</a>.</p>
     274<p><a href="https://wordpress.org/download/">Download WordPress 4.8.2</a> or venture over to Dashboard → Updates and simply click “Update Now.” Sites that support automatic background updates are already beginning to update to WordPress 4.8.2.</p>
     275<p>Thanks to everyone who contributed to 4.8.2.</p>
     276]]></content:encoded>
     277                <post-id xmlns="com-wordpress:feed-additions:1">4909</post-id>  </item>
     278                <item>
     279                <title>The Month in WordPress: August 2017</title>
     280                <link>https://wordpress.org/news/2017/09/the-month-in-wordpress-august-2017/</link>
     281                <pubDate>Fri, 01 Sep 2017 10:02:16 +0000</pubDate>
     282                <dc:creator><![CDATA[Hugh Lashbrooke]]></dc:creator>
     283                                <category><![CDATA[Month in WordPress]]></category>
     284
     285                <guid isPermaLink="false">https://wordpress.org/news/?p=4899</guid>
     286                <description><![CDATA[While there haven’t been any major events or big new developments in the WordPress world this past month, a lot of work has gone into developing a sustainable future for the project. Read on to find out more about this and other interesting news from around the WordPress world in August. The Global WordPress Translation [&#8230;]]]></description>
     287                                <content:encoded><![CDATA[<p>While there haven’t been any major events or big new developments in the WordPress world this past month, a lot of work has gone into developing a sustainable future for the project. Read on to find out more about this and other interesting news from around the WordPress world in August.</p>
     288<hr />
     289<h2>The Global WordPress Translation Day Returns</h2>
     290<p>On September 30, the WordPress Polyglots team will be holding <a href="https://wptranslationday.org/">the third Global WordPress Translation Day</a>. This is a 24-hour global event dedicated to the translation of the WordPress ecosystem (core, themes, plugins), and is a mix of physical, in-person translation work with online streaming of talks from WordPress translators all over the world.</p>
     291<p>Meetup groups will be holding events where community members will come together to translate WordPress. To get involved in this worldwide event, <a href="https://www.meetup.com/pro/wordpress/">join your local meetup group</a> or, if one is not already taking place in your area, organize one for your community.</p>
     292<p>You can find out more information <a href="https://wptranslationday.org/global-wordpress-translation-day-3/">on the Translation Day blog</a> and in the #polyglots-events channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a>.</p>
     293<h2>WordPress Foundation to Run Open Source Training Worldwide</h2>
     294<p>The WordPress Foundation is a non-profit organization that exists to provide educational events and resources for hackathons, support of the open web, and promotion of diversity in the global open source community.</p>
     295<p>In an effort to push these goals forward, <a href="http://wordpressfoundation.org/2017/call-for-organizers-introduction-to-open-source/">the Foundation is going to be offering assistance</a> to communities who would like to run local open source training workshops. A number of organizers have applied to be a part of this initiative, and the Foundation will be selecting two communities in the coming weeks.</p>
     296<p>Follow <a href="http://wordpressfoundation.org/news/">the WordPress Foundation blog</a> for updates.</p>
     297<h2>Next Steps in WordPress Core’s PHP Focus</h2>
     298<p>After <a href="https://wordpress.org/news/2017/08/the-month-in-wordpress-july-2017/">last month’s</a> push to focus on WordPress core’s PHP development, a number of new initiatives have been proposed and implemented. The first of these initiatives is a page on WordPress.org that will educate users on the benefits of upgrading PHP. The page and its implementation are still in development, so <a href="https://github.com/WordPress/servehappy">you can follow and contribute on GitHub</a>.</p>
     299<p>Along with this, <a href="https://make.wordpress.org/plugins/2017/08/29/minimum-php-version-requirement/">plugin developers are now able to specify</a> the minimum required PHP version for their plugins. This version will then be displayed on the Plugin Directory page, but it will not (yet) prevent users from installing it.</p>
     300<p>The next evolution of this is for the minimum PHP requirement to be enforced so that plugins will only work if that requirement is met. You can assist with this implementation by contributing your input or a patch on <a href="https://core.trac.wordpress.org/ticket/40934">the open ticket</a>.</p>
     301<p>As always, discussions around the implementation of PHP in WordPress core are done in the #core-php channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a>.</p>
     302<h2>New Editor Development Continues</h2>
     303<p>For a few months now, the core team has been steadily working on Gutenberg, the new editor for WordPress core. While Gutenberg is still in development and is some time away from being ready, a huge amount of progress has already been made. In fact, <a href="https://make.wordpress.org/core/2017/08/29/whats-new-in-gutenberg-august-29/">v1.0.0 of Gutenberg</a> was released this week.</p>
     304<p>The new editor is available as a plugin <a href="https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/">for testing</a> and <a href="https://make.wordpress.org/core/2017/08/11/revised-suggested-roadmap-for-gutenberg-and-customization/">the proposed roadmap</a> is for it to be merged into core in early 2018. You can get involved in the development of Gutenberg by joining the #core-editor channel in the <a href="https://make.wordpress.org/chat/">Making WordPress Slack group</a> and following the <a href="https://make.wordpress.org/core/">WordPress Core development blog</a>.</p>
     305<hr />
     306<h2>Further reading:</h2>
     307<ul>
     308<li>On the topic of Gutenberg, <a href="https://ma.tt/2017/08/we-called-it-gutenberg-for-a-reason/">Matt Mullenweg wrote a post</a> to address some of the concerns that the community has expressed about the new editor.</li>
     309<li><a href="http://hookrefineandtinker.com/2017/08/jaiwp-an-alternative-project-to-wordcamp-india/">A new movement has started</a> in the Indian WordPress community named JaiWP — the organizers are seeking to unite and motivate the country’s many local communities.</li>
     310<li><a href="https://richtabor.com/merlin-wp/">Merlin WP</a> is a new plugin offering theme developers an easy way to onboard their users.</li>
     311<li>Ryan McCue posted <a href="https://make.wordpress.org/core/2017/08/23/rest-api-roadmap/">an ambitious roadmap</a> for the future of the WordPress REST API — many contributions from the community will be needed in order to reach these goals.</li>
     312<li>Want to know what you can expect in the next major release of WordPress? <a href="https://make.wordpress.org/core/2017/08/11/wordpress-4-9-goals/">Here’s a look</a> at what the core team is planning for v4.9.</li>
     313<li>To help combat the difficulties that Trac presents to WordPress Core contributors, Ryan McCue built an alternative platform dubbed <a href="https://github.com/rmccue/not-trac">Not Trac</a>.</li>
     314<li><a href="https://make.wordpress.org/cli/2017/08/08/version-1-3-0-released/">v1.3.0 of WP-CLI was released</a> earlier in the month, adding a whole lot of great new features to the useful tool.</li>
     315</ul>
     316<p><i><span style="font-weight: 400">If you have a story we should consider including in the next &#8220;Month in WordPress&#8221; post, please </span></i><a href="https://make.wordpress.org/community/month-in-wordpress-submissions/"><i><span style="font-weight: 400">submit it here</span></i></a><i><span style="font-weight: 400">.</span></i></p>
     317]]></content:encoded>
     318                <post-id xmlns="com-wordpress:feed-additions:1">4899</post-id>  </item>
     319                <item>
     320                <title>WordPress 4.8.1 Maintenance Release</title>
     321                <link>https://wordpress.org/news/2017/08/wordpress-4-8-1-maintenance-release/</link>
     322                <pubDate>Wed, 02 Aug 2017 21:26:25 +0000</pubDate>
     323                <dc:creator><![CDATA[Weston Ruter]]></dc:creator>
     324                                <category><![CDATA[Releases]]></category>
     325
     326                <guid isPermaLink="false">https://wordpress.org/news/?p=4875</guid>
     327                <description><![CDATA[After over 13 million downloads of WordPress 4.8, we are pleased to announce the immediate availability of WordPress 4.8.1, a maintenance release. This release contains 29 maintenance fixes and enhancements, chief among them are fixes to the rich Text widget and the introduction of the Custom HTML widget. For a full list of changes, consult the release [&#8230;]]]></description>
     328                                <content:encoded><![CDATA[<p>After over 13 million downloads of WordPress 4.8, we are pleased to announce the immediate availability of WordPress 4.8.1, a maintenance release.</p>
     329<p>This release contains 29 maintenance fixes and enhancements, chief among them are fixes to the rich Text widget and the introduction of the Custom HTML widget. For a full list of changes, consult the <a href="https://codex.wordpress.org/Version_4.8.1">release notes</a>, the <a href="https://core.trac.wordpress.org/query?status=closed&amp;milestone=4.8.1&amp;group=component">tickets closed</a>, and the <a href="https://core.trac.wordpress.org/log/branches/4.8?rev=41210&amp;stop_rev=40891">list of changes</a>.</p>
     330<p><a href="https://wordpress.org/download/">Download WordPress 4.8.1</a> or visit <strong>Dashboard → Updates</strong> and simply click “Update Now.” Sites that support automatic background updates are already beginning to update to WordPress 4.8.1.</p>
     331<p>Thanks to everyone who contributed to 4.8.1:<br />
     332<a href="https://profiles.wordpress.org/adamsilverstein/">Adam Silverstein</a>, <a href="https://profiles.wordpress.org/afercia/">Andrea Fercia</a>, <a href="https://profiles.wordpress.org/azaozz/">Andrew Ozz</a>, <a href="https://profiles.wordpress.org/atanasangelovdev/">Atanas Angelov</a>, <a href="https://profiles.wordpress.org/gitlost/">bonger</a>, <a href="https://profiles.wordpress.org/boonebgorges/">Boone Gorges</a>, <a href="https://profiles.wordpress.org/bor0/">Boro Sitnikovski</a>, <a href="https://profiles.wordpress.org/dlh/">David Herrera</a>, <a href="https://profiles.wordpress.org/jnylen0/">James Nylen</a>, <a href="https://profiles.wordpress.org/jbpaul17/">Jeffrey Paul</a>, <a href="https://profiles.wordpress.org/jmdodd/">Jennifer M. Dodd</a>, <a href="https://profiles.wordpress.org/kadamwhite/">K. Adam White</a>, <a href="https://profiles.wordpress.org/obenland/">Konstantin Obenland</a>, <a href="https://profiles.wordpress.org/melchoyce/">Mel Choyce</a>, <a href="https://profiles.wordpress.org/r-a-y/">r-a-y</a>, <a href="https://profiles.wordpress.org/greuben/">Reuben Gunday</a>, <a href="https://profiles.wordpress.org/rinkuyadav999/">Rinku Y</a>, <a href="https://profiles.wordpress.org/sa3idho/">Said El Bakkali</a>, <a href="https://profiles.wordpress.org/sergeybiryukov/">Sergey Biryukov</a>, <a href="https://profiles.wordpress.org/nomnom99/">Siddharth Thevaril</a>, <a href="https://profiles.wordpress.org/timmydcrawford/">Timmy Crawford</a>, and <a href="https://profiles.wordpress.org/westonruter/">Weston Ruter</a>.</p>
     333]]></content:encoded>
     334                <post-id xmlns="com-wordpress:feed-additions:1">4875</post-id>  </item>
     335        </channel>
     336</rss>
  • new file tests/phpunit/data/feeds/news/planet.xml

    diff --git tests/phpunit/data/feeds/news/planet.xml tests/phpunit/data/feeds/news/planet.xml
    new file mode 100644
    index 0000000..3361780
    - +  
     1<?xml version="1.0"?>
     2<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
     3<channel>
     4        <title>WordPress Planet</title>
     5        <link>http://planet.wordpress.org/</link>
     6        <language>en</language>
     7        <description>WordPress Planet - http://planet.wordpress.org/</description>
     8<item>
     9        <title>Dev Blog: 2017 WordPress Survey and WordCamp US</title>
     10        <guid>https://wordpress.org/news/?p=5004</guid>
     11        <link>https://wordpress.org/news/2017/10/2017-wordpress-survey-and-wordcamp-us/</link>
     12        <description>&lt;p&gt;It’s time for the annual WordPress user and developer survey! If you’re a WordPress user, developer, or business owner, then we want your feedback. Just like previous years, we’ll share the data at the upcoming WordCamp US (WCUS).&lt;/p&gt;
     13&lt;p&gt;It only takes a few minutes to &lt;a href=&quot;http://wordpressdotorg.polldaddy.com/s/wordpress-2017-survey&quot;&gt;fill out the survey&lt;/a&gt;, which will provide an overview of how people use WordPress. &lt;/p&gt;
     14&lt;a href=&quot;https://2017.us.wordcamp.org/tickets/&quot;&gt;&lt;img src=&quot;https://i0.wp.com/wordpress.org/news/files/2017/10/header.jpg?resize=357%2C148&amp;ssl=1&quot; /&gt;&lt;/a&gt;WordCamp US in Nashville
     15&lt;p&gt;The &lt;a href=&quot;https://wordpress.tv/tag/state-of-the-word/&quot;&gt;State of the Word&lt;/a&gt; includes stats and an overview of what&amp;#x27;s new in WordPress and is given every year at WCUS. Don&amp;#x27;t forget that tickets are available &lt;a href=&quot;https://2017.us.wordcamp.org&quot;&gt;now&lt;/a&gt; so you can join the excitement in Nashville this year!&lt;/p&gt;</description>
     16        <pubDate>Thu, 26 Oct 2017 20:59:32 +0000</pubDate>
     17        <dc:creator>Josepha</dc:creator>
     18</item>
     19<item>
     20        <title>WPTavern: WordPress 4.9 Will Support Shortcodes and Embedded Media in the Text Widget</title>
     21        <guid>https://wptavern.com/?p=76066</guid>
     22        <link>https://wptavern.com/wordpress-4-9-will-support-shortcodes-and-embedded-media-in-the-text-widget</link>
     23        <description>&lt;p&gt;WordPress 4.8 brought TinyMCE to the core Text widget, along with brand new Image, Video, and Audio media widgets. The upcoming 4.9 release builds on this progress and will introduce some long-awaited improvements to Text widget. Users will finally be able to &lt;a href=&quot;https://make.wordpress.org/core/2017/10/24/widget-improvements-in-wordpress-4-9/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;use shortcodes in the Text widget&lt;/a&gt; without the help of additional code from plugins or themes.&lt;/p&gt;
     24&lt;p&gt;This new feature is the answer to an eight-year-old &lt;a href=&quot;https://core.trac.wordpress.org/ticket/10457&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;ticket&lt;/a&gt; requesting shortcode support inside the Text widget. Weston Ruter broke down the technical details in the &lt;a href=&quot;https://make.wordpress.org/core/2017/10/24/widget-improvements-in-wordpress-4-9/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;dev note&lt;/a&gt; for the feature, explaining why it took so long to find a solution:&lt;/p&gt;
     25&lt;blockquote&gt;&lt;p&gt;One reason for the long delay with adding shortcode support in Text widgets was due to many shortcodes looking for a global &lt;code&gt;$post&lt;/code&gt; when they run. Since the global &lt;code&gt;$post&lt;/code&gt; varies depending on whatever the query is, the shortcodes in a Text widget could render wildly different on different templates of a site. The solution worked out was to temporarily nullify the global &lt;code&gt;$post&lt;/code&gt; before doing the shortcodes so that they will consistently have the same global state, with this global $post then restored after the shortcodes are done.&lt;/p&gt;&lt;/blockquote&gt;
     26&lt;p&gt;Hundreds of thousands of WordPress installations currently &lt;a href=&quot;https://wordpress.org/plugins/search/shortcodes+text+widget/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;use a plugin to add shortcode support to widgets&lt;/a&gt;. Contributors to 4.9 have taken this into account so that updating will not cause unexpected issues.&lt;/p&gt;
     27&lt;p&gt;&amp;#8220;If a plugin has added &lt;code&gt;do_shortcode()&lt;/code&gt; to &lt;code&gt;widget_text&lt;/code&gt; then this filter will be suspended while the widget runs to prevent shortcodes from being applied twice,&amp;#8221; Ruter said.&lt;/p&gt;
     28&lt;p&gt;In addition to the &lt;a href=&quot;https://wptavern.com/new-core-gallery-widget-targeted-for-wordpress-4-9&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;new core gallery widget&lt;/a&gt; landing in 4.9, this release will also allow users to embed media in the Text widget. A new &amp;#8220;Add Media&amp;#8221; button is available, making it easy for users to insert images, audio, galleries, and videos, along with text and other content. WordPress 4.9 also adds support for oEmbeds in the Text widget and the Video widget has been updated with expanded support for any oEmbed provider for video.&lt;/p&gt;
     29&lt;p&gt;&lt;a href=&quot;https://i2.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-26-at-12.00.59-AM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     30&lt;p&gt;Little enhancements like these make it easier for users to update their own websites without having to hire a developer or add extra plugins for things that should be simple. The improvements to widgets have also been implemented in such a way that users will be more prepared for how Gutenberg will handle media.&lt;/p&gt;
     31&lt;p&gt;&amp;#8220;The media-specific widgets are closely aligned with blocks in Gutenberg; the existence of media inside the Text widget will align with eventual nested blocks in Gutenberg, and would be treated as Classic Text blocks in any future migration from widgets to blocks,&amp;#8221; Ruter said.&lt;/p&gt;
     32&lt;p&gt;WordPress 4.9 will improve the experience of switching between themes by including logic that is better at mapping widgets between two themes&amp;#8217; widget areas. This release will also improve the &lt;a href=&quot;https://core.trac.wordpress.org/ticket/23120&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;UI for updating and saving widgets&lt;/a&gt; in the admin screen. It adds an indicator that shows whether or not widget changes have been saved, as well as a notice if the user attempts to leave the page with unsaved changes.&lt;/p&gt;</description>
     33        <pubDate>Thu, 26 Oct 2017 05:46:43 +0000</pubDate>
     34        <dc:creator>Sarah Gooding</dc:creator>
     35</item>
     36<item>
     37        <title>WPTavern: WPWeekly Episode 292 – Recap of WooConf and CaboPress</title>
     38        <guid>https://wptavern.com?p=76080&amp;preview=true&amp;preview_id=76080</guid>
     39        <link>https://wptavern.com/wpweekly-episode-292-recap-of-wooconf-and-cabopress</link>
     40        <description>&lt;p&gt;In this episode, &lt;a href=&quot;https://jjj.blog/&quot;&gt;John James Jacoby&lt;/a&gt; and I are joined by Cody Landefeld, co-founder of &lt;a href=&quot;https://modeeffect.com/&quot;&gt;Mode Effect&lt;/a&gt;. Landefeld described his experience attending WooConf as we reviewed highlights from the State of the Woo.&lt;/p&gt;
     41&lt;p&gt;We also discussed WooCommerce retiring its Canvas theme in favor of Storefront. Jacoby shared his experience attending CaboPress and near the end of the show, we talk about WordPress 4.9 Beta 4.&lt;/p&gt;
     42&lt;h2&gt;Stories Discussed:&lt;/h2&gt;
     43&lt;p&gt;&lt;a href=&quot;https://wptavern.com/woocommerce-stores-on-track-to-surpass-10b-in-sales-this-year&quot;&gt;WooCommerce Stores on Track to Surpass $10B in Sales This Year&lt;/a&gt;&lt;br /&gt;
     44&lt;a href=&quot;https://wptavern.com/woocommerce-retires-canvas-theme-recommends-customers-migrate-to-storefront-theme&quot;&gt;WooCommerce Retires Canvas Theme, Recommends Customers Migrate to Storefront Theme&lt;/a&gt;&lt;br /&gt;
     45&lt;a href=&quot;https://wptavern.com/wordpress-4-9-beta-4-removes-try-gutenberg-call-to-action&quot;&gt;WordPress 4.9 Beta 4 Removes ‘Try Gutenberg’ Call to Action&lt;/a&gt;&lt;/p&gt;
     46&lt;h2&gt;Picks of the Week:&lt;/h2&gt;
     47&lt;p&gt;HeroPress is &lt;a href=&quot;https://heropress.com/accepting-donations/&quot;&gt;now accepting donations&lt;/a&gt;. If you support the project, please consider donating.&lt;/p&gt;
     48&lt;p&gt;Ninja Forms achieved a milestone. The plugin is activated on more than 1M sites.&lt;/p&gt;
     49&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
     50&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Ninja Forms reached 1 million active installs at the very beginning of the day today! This is a huge milestone! &lt;a href=&quot;https://t.co/RECAHWJyOV&quot;&gt;https://t.co/RECAHWJyOV&lt;/a&gt;&lt;/p&gt;
     51&lt;p&gt;&amp;mdash; James Laws (@jameslaws) &lt;a href=&quot;https://twitter.com/jameslaws/status/923251034272817152?ref_src=twsrc%5Etfw&quot;&gt;October 25, 2017&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
     52&lt;p&gt;&lt;/p&gt;
     53&lt;h2&gt;WPWeekly Meta:&lt;/h2&gt;
     54&lt;p&gt;&lt;strong&gt;Next Episode:&lt;/strong&gt; Wednesday, November 1st 3:00 P.M. Eastern&lt;/p&gt;
     55&lt;p&gt;&lt;strong&gt;Subscribe To WPWeekly Via Itunes: &lt;/strong&gt;&lt;a href=&quot;https://itunes.apple.com/us/podcast/wordpress-weekly/id694849738&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Click here to subscribe&lt;/a&gt;&lt;/p&gt;
     56&lt;p&gt;&lt;strong&gt;Subscribe To WPWeekly Via RSS: &lt;/strong&gt;&lt;a href=&quot;https://wptavern.com/feed/podcast&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Click here to subscribe&lt;/a&gt;&lt;/p&gt;
     57&lt;p&gt;&lt;strong&gt;Subscribe To WPWeekly Via Stitcher Radio: &lt;/strong&gt;&lt;a href=&quot;http://www.stitcher.com/podcast/wordpress-weekly-podcast?refid=stpr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Click here to subscribe&lt;/a&gt;&lt;/p&gt;
     58&lt;p&gt;&lt;strong&gt;Listen To Episode #292:&lt;/strong&gt;&lt;br /&gt;
     59&lt;/p&gt;</description>
     60        <pubDate>Thu, 26 Oct 2017 01:13:31 +0000</pubDate>
     61        <dc:creator>Jeff Chandler</dc:creator>
     62</item>
     63<item>
     64        <title>WPTavern: Goodnight Firebug</title>
     65        <guid>https://wptavern.com/?p=76038</guid>
     66        <link>https://wptavern.com/goodnight-firebug</link>
     67        <description>&lt;p&gt;&lt;a href=&quot;https://i2.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-25-at-1.07.39-PM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     68&lt;p&gt;Twitter is lighting up with sentimental Firebug remembrances today after Mozilla &lt;a href=&quot;https://hacks.mozilla.org/2017/10/saying-goodbye-to-firebug/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;announced&lt;/a&gt; it will reach end-of-life in the Firefox browser next month. Firebug was the first browser-based tool that allowed developers to easily inspect HTML and debug JS. It was discontinued as a separate add-on and &lt;a href=&quot;https://hacks.mozilla.org/2016/12/firebug-lives-on-in-firefox-devtools/?mc_cid=a4117f9cbc&amp;mc_eid=ad602f9b49&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;merged into Firefox DevTools&lt;/a&gt; in 2016 where it will live on.&lt;/p&gt;
     69&lt;p&gt;I remember the days of painstaking debugging before Firebug was available. It was a revolutionary tool that instantly became indispensable, helping developers work more efficiently.&lt;/p&gt;
     70&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
     71&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Firebug was the rare kind of tool that instantly doubled the productivity of every developer it touched.&lt;/p&gt;
     72&lt;p&gt;&amp;mdash; Rob Spectre (@dN0t) &lt;a href=&quot;https://twitter.com/dN0t/status/923198959082000384?ref_src=twsrc%5Etfw&quot;&gt;October 25, 2017&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
     73&lt;p&gt;&lt;/p&gt;
     74&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
     75&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;RIP Firebug. Couldn't have built any of my companies without you. &lt;a href=&quot;https://t.co/NzoWHtxbTu&quot;&gt;https://t.co/NzoWHtxbTu&lt;/a&gt;&lt;/p&gt;
     76&lt;p&gt;&amp;mdash; justin kan (@justinkan) &lt;a href=&quot;https://twitter.com/justinkan/status/922948111684714496?ref_src=twsrc%5Etfw&quot;&gt;October 24, 2017&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
     77&lt;p&gt;&lt;/p&gt;
     78&lt;p&gt;&amp;#8220;Firebug changed everything for me as a frontend developer,&amp;#8221; Jens Grochtdreis said. &amp;#8220;Looking back I cannot remember how hard the times were before Firebug stepped on the scene. Now each browser has mature developer tools. That’s because of Firebug. Mission accomplished!&amp;#8221;&lt;/p&gt;
     79&lt;p&gt;In recognition of what Firebug brought to developers, Mozilla reviewed one of the most important points in Firebug history &amp;#8211; the decision to open source the software. This allowed for the proliferation of similar browser development tools that we see today. Firebug creator Joe Hewitt, who eventually moved on to Facebook, made the tool open source in December 2006:&lt;/p&gt;
     80&lt;blockquote&gt;&lt;p&gt;The first announcement is in regards to Firebug’s licensing. As I was developing Firebug 1.0, I began to wonder if I should try to turn the project from a hobby into a business. When I proposed this idea on my blog, the response was very positive and reaffirmed my belief that Firebug could do well as a commercial product.&lt;br /&gt;
     81However, in the end, I just don’t feel like that is the right thing to do. I love working on Firebug because I know I’m making a lot of people happy and helping to advance the state of the art. That’s a lot more meaningful to me than just about anything else, and so, I’ve decided that &lt;strong&gt;Firebug will remain free and open source.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
     82&lt;p&gt;Mozilla reported that more than a million people are still using the Firebug add-on. Firefox Developer Tools has a guide for &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Tools/Migrating_from_Firebug&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;migrating from Firebug&lt;/a&gt;. There are still several Firebug features missing from Firefox DevTools, but &lt;a href=&quot;https://bugzil.la/991806&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Mozilla is tracking them&lt;/a&gt; and working to bring greater parity between the two. Support for the separate Firebug extension will be discontinued with the release of Firefox Quantum (version 57) in November 2017.&lt;/p&gt;</description>
     83        <pubDate>Wed, 25 Oct 2017 19:26:53 +0000</pubDate>
     84        <dc:creator>Sarah Gooding</dc:creator>
     85</item>
     86<item>
     87        <title>WPTavern: WordPress 4.9 Beta 4 Removes ‘Try Gutenberg’ Call to Action</title>
     88        <guid>https://wptavern.com/?p=76047</guid>
     89        <link>https://wptavern.com/wordpress-4-9-beta-4-removes-try-gutenberg-call-to-action</link>
     90        <description>&lt;p&gt;WordPress beta releases typically don&amp;#8217;t generate controversy but in WordPress 4.9 Beta 3, a &lt;a href=&quot;https://core.trac.wordpress.org/ticket/41316&quot;&gt;call to action was added&lt;/a&gt; to the dashboard that encouraged users to install and activate &lt;a href=&quot;https://wordpress.org/plugins/gutenberg/&quot;&gt;Gutenberg&lt;/a&gt;.&lt;/p&gt;
     91&lt;img /&gt;Try Gutenberg Call to Action
     92&lt;p&gt;Members of the WordPress community raised concerns that clients may install Gutenberg and shared ways to hide the prompt from users. The negative reaction inspired some developers to &lt;a href=&quot;https://github.com/boogah/gutenag&quot;&gt;create plugins&lt;/a&gt; that hide the prompt.&lt;/p&gt;
     93&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
     94&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;WordPress 4.9 beta 3 includes a Gutenberg notification. I think this is a bad idea. This might trigger clients to try it, with bad things that can happen. If this goes in 4.9, use this code in your functions.php: remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' ); &lt;a href=&quot;https://t.co/VwCo2OUtvc&quot;&gt;pic.twitter.com/VwCo2OUtvc&lt;/a&gt;&lt;/p&gt;
     95&lt;p&gt;&amp;mdash; Marcel Bootsman (@mbootsman) &lt;a href=&quot;https://twitter.com/mbootsman/status/920904595823644672?ref_src=twsrc%5Etfw&quot;&gt;October 19, 2017&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
     96&lt;p&gt;&lt;/p&gt;
     97&lt;p&gt;One of the &lt;a href=&quot;https://core.trac.wordpress.org/ticket/41316#comment:33&quot;&gt;primary concerns&lt;/a&gt; is that Gutenberg is in a high state of flux and encouraging users to create content inside of it on live sites may cause compatibility issues or adversely affect saved content in the future.&lt;/p&gt;
     98&lt;p&gt;&amp;#8220;Any change to the integrity of published content and its formatting that results from changes during continued development and evolution would be unacceptable from the point that we encourage users this directly to install it on live sites,&amp;#8221; Nick Halsey said.&lt;/p&gt;
     99&lt;p&gt;&amp;#8220;On the other hand, this could require core to take on significant technical debt to maintain compatibility for earlier iterations of the editor as a plugin.&lt;/p&gt;
     100&lt;p&gt;&amp;#8220;There should be a make/core post addressing this issue, at a minimum, along with a compatibility plan for the next stage of development as a plugin. Before core encourages millions of sites to use the plugin and rely on it functioning a certain way.&amp;#8221;&lt;/p&gt;
     101&lt;p&gt;Other members of the community advocated for the call to action saying it would lead to a larger test sample.&lt;/p&gt;
     102&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
     103&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Getting the public to test Gutenberg is essential. If bad things happen, that's important data that must be gathered before full release.&lt;/p&gt;
     104&lt;p&gt;&amp;mdash; MortenRandHendriksen (@mor10) &lt;a href=&quot;https://twitter.com/mor10/status/921031245710082048?ref_src=twsrc%5Etfw&quot;&gt;October 19, 2017&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
     105&lt;p&gt;&lt;/p&gt;
     106&lt;p&gt;The call to action &lt;a href=&quot;https://core.trac.wordpress.org/ticket/41316#comment:49&quot;&gt;was removed&lt;/a&gt; after the core team discussed it with Matt Mullenweg, &amp;#8220;I like the idea of the Gutenberg promo, but want things to be a bit further along before we really open the doors to try to get as many users as possible,&amp;#8221; Mullenweg said. &amp;#8220;If we can flag off or remove the promo, we can always bring it back in 4.9.1 or another time when things are more ready.&amp;#8221;&lt;/p&gt;
     107&lt;h2&gt;&amp;#8216;Try Gutenberg&amp;#8217; Dashboard Prompt Will Set A New Precedent&lt;/h2&gt;
     108&lt;p&gt;There have been many WordPress features in core that started off as plugins first, MP6 being one of the &lt;a href=&quot;https://wptavern.com/mp6-is-like-eye-candy&quot;&gt;most memorable&lt;/a&gt;. However, to the best of my knowledge, there has never been a dashboard prompt encouraging users to install and activate a beta plugin on a live site.&lt;/p&gt;
     109&lt;p&gt;Although the call to action is focused on raising awareness of Gutenberg, &lt;a href=&quot;https://core.trac.wordpress.org/ticket/41316#comment:47&quot;&gt;John James Jacoby suggests&lt;/a&gt; that the meta block be rewritten so that it can be recycled for other features or plugins to use in the future.&lt;/p&gt;
     110&lt;p&gt;&amp;#8220;My concern is that the current approach is not scalable to future feature developments beyond Gutenberg,&amp;#8221; Jacoby said. &amp;#8220;For example, when a new codenamed feature comes along for WordPress 5.2, cloning this same approach does not seem ideal.&amp;#8221;&lt;/p&gt;
     111&lt;p&gt;He suggests that the dashboard widget become a standard part of the dashboard. &amp;#8220;This way, we can hype the new hotness on an as-needed basis, and plugins that want to hide it forever can reliably do so one time in a plugin,&amp;#8221; Jacoby said.&lt;/p&gt;
     112&lt;h2&gt;When Is the Right Time to Hype Gutenberg to the Masses?&lt;/h2&gt;
     113&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/gutenberg/&quot;&gt;Gutenberg&lt;/a&gt; is actively installed on more than 3K sites with &lt;a href=&quot;https://wordpress.org/plugins/gutenberg/advanced/&quot;&gt;nearly half of installations&lt;/a&gt; running version 1.4. This is a far cry from the 100K active installs &lt;a href=&quot;https://wptavern.com/wordpress-new-gutenberg-editor-now-available-as-a-plugin-for-testing&quot;&gt;Mullenweg would like to see&lt;/a&gt; before merging it into core.&lt;/p&gt;
     114&lt;p&gt;I don&amp;#8217;t think advertising Gutenberg in the dashboard to millions of users as the new editing experience should be considered until a merge proposal has been published on the Make Core WordPress site. By this time, many of its quirks and how it handles meta data, meta blocks, and preventing data loss will likely be solved.&lt;/p&gt;
     115&lt;p&gt;I am one of the people who raised their eyebrows at the idea of advertising Gutenberg at its current stage of development to the masses. My primary concern is that it&amp;#8217;s not ready yet. At the same time, I wonder when or if there is a right or responsible time to advertise installing beta software onto a live site. What do you think?&lt;/p&gt;</description>
     116        <pubDate>Wed, 25 Oct 2017 18:35:15 +0000</pubDate>
     117        <dc:creator>Jeff Chandler</dc:creator>
     118</item>
     119<item>
     120        <title>Donncha: Writing WP Super Cache Plugins</title>
     121        <guid>https://odd.blog/?p=89500474</guid>
     122        <link>https://odd.blog/2017/10/25/writing-wp-super-cache-plugins/</link>
     123        <description>&lt;p&gt;WP Super Cache is a full page caching plugin for WordPress. When a page is cached almost all of WordPress is skipped and the page is sent to the browser with the minimum amount of code executed. This makes the page load much faster.&lt;/p&gt;
     124&lt;p&gt;Unfortunately if you want to run code on every page load you&amp;#8217;re out of luck as regular WordPress plugins are not loaded or executed. You&amp;#8217;ll need to write a WP Super Cache plugin. This short introduction will not teach you how to write plugins but the example plugins that ship with WP Super Cache will get you a long way towards understanding how they work.&lt;/p&gt;
     125&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
     126&lt;p&gt;WP Super Cache ships with some example plugins in wp-super-cache/plugins/. Some of them even do useful tasks like help with domain mapping and Jetpack integration. There&amp;#8217;s one called &amp;#8220;awaitingmoderation.php&amp;#8221; which removes the text &amp;#8220;Your comment is awaiting moderation.&amp;#8221; when someone writes a moderated comment.&lt;br /&gt;
     127There&amp;#8217;s also dynamic-cache-test.php which is a complicated beast but it&amp;#8217;s heavily commented. It allows you to add template tags to your site that are replaced when the cached page is loaded.&lt;/p&gt;
     128&lt;p&gt;Before you get started writing a plugin you should be aware that you should &lt;em&gt;not&lt;/em&gt; use the wp-super-cache/plugins/ directory. Every time WP Super Cache is updated this directory is deleted. So, edit your wp-config.php and set &lt;code&gt;$wp_cache_plugins_dir&lt;/code&gt; to another directory where you&amp;#8217;ll put your plugin.&lt;/p&gt;
     129&lt;p&gt;These plugins run before most of WordPress has loaded. That means you can&amp;#8217;t rely on some of the nice features of WordPress such as filters and actions. However, WP Super Cache has it&amp;#8217;s own action/filter system that is similar to actions and filters in WordPress:&lt;/p&gt;
     130&lt;ul&gt;
     131&lt;li&gt;add_cacheaction( $action, $func )&lt;/li&gt;
     132&lt;li&gt;do_cacheaction( $action, $value = &amp;#8221; )&lt;/li&gt;
     133&lt;/ul&gt;
     134&lt;p&gt;A cacheaction is also a filter. If you hook on to a cache action that has a parameter, you must return that parameter at the end of the function like you would with a WordPress filter.&lt;/p&gt;
     135&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
     136&lt;p&gt;If you need to hook into a WordPress filter use the imaginatively named cache action &amp;#8220;add_cacheaction&amp;#8221;. That runs on &amp;#8220;init&amp;#8221; so the function that is executed can use &lt;code&gt;add_action()&lt;/code&gt; or &lt;code&gt;add_filter()&lt;/code&gt;. You can see this in action in the plugins/dynamic-cache-test.php or plugins/awaitingmoderation.php scripts.&lt;/p&gt;
     137&lt;p&gt;Two very useful filters are the WordPress filter, &amp;#8220;wpsupercache_buffer&amp;#8221; (in wp-cache-phase2.php) that is used to modify the page before it is &lt;em&gt;cached&lt;/em&gt; and the cache action &amp;#8220;wpsc_cachedata&amp;#8221; (in wp-cache-phase1.php) is used to modify the cached page just before it&amp;#8217;s &lt;em&gt;served&lt;/em&gt;.&lt;/p&gt;
     138
     139&lt;p&gt;&lt;strong&gt;Related Posts&lt;/strong&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://odd.blog/2008/10/24/wp-super-cache-084-the-garbage-collector/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: WP Super Cache 0.8.4, the garbage collector&quot;&gt;WP Super Cache 0.8.4, the garbage collector&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://odd.blog/2010/02/08/wp-super-cache-099/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: WP Super Cache 0.9.9&quot;&gt;WP Super Cache 0.9.9&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://odd.blog/2009/07/17/wp-super-cache-0-9-5/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: WP Super Cache 0.9.5&quot;&gt;WP Super Cache 0.9.5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
     140&lt;p&gt;&lt;a href=&quot;https://odd.blog/&quot; rel=&quot;nofollow&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;</description>
     141        <pubDate>Wed, 25 Oct 2017 16:21:28 +0000</pubDate>
     142        <dc:creator>Donncha</dc:creator>
     143</item>
     144<item>
     145        <title>HeroPress: Paying It Forward</title>
     146        <guid>https://heropress.com/?post_type=heropress-essays&amp;p=2217</guid>
     147        <link>https://heropress.com/essays/paying-it-forward/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=paying-it-forward</link>
     148        <description>&lt;img width=&quot;960&quot; height=&quot;480&quot; src=&quot;http://20094-presscdn.pagely.netdna-cdn.com/wp-content/uploads/2017/10/102817-1024x512.jpg&quot; class=&quot;attachment-large size-large wp-post-image&quot; alt=&quot;Pull quote: The spirit of WordPress is paying it forward.&quot; /&gt;&lt;p&gt;I have always embraced an entrepreneurial spirit. As a kid in the 1970’s, I tagged along with my parents to craft shows on the weekends where they made and sold hand-stamped leather belts to earn extra income and I made macrame necklaces and sold those too. When I was 14 I told my dad I wanted to be a stewardess when I grew up, he said “Why not be the pilot? Be the captain!” and gave me some flight lessons for my birthday (I discovered I get air sick very easily, so did not pursue that dream for long!).&lt;/p&gt;
     149&lt;p&gt;Throughout my childhood and into adulthood, I loved to create things that people would buy from me &amp;#8211; from a lemonade stand when I was 7 to custom-made t-shirts I sold on football weekends in college;&lt;/p&gt;
     150&lt;blockquote&gt;&lt;p&gt;I was always thinking about ways to earn income &amp;#8211; not to get rich, but to have the validation that I created something of value to others.&lt;/p&gt;&lt;/blockquote&gt;
     151&lt;h3&gt;Pivoting to Entrepreneurship&lt;/h3&gt;
     152&lt;p&gt;Fast-forward to a time after my first child was born. My career in advertising and marketing introduced me to tools, techniques and jargon that are still valid today, but “working for the man” was never a truly satisfying experience for me. Thankfully, my husband had a salaried job with benefits, and since he traveled a lot for work, we decided that I would stay home with our son. When I left my marketing job, my boss suggested I start a little business selling illustrated prints I had become known for around the office, having given them as gifts to my co-workers when they had babies.&lt;/p&gt;
     153&lt;p&gt;&lt;img class=&quot;alignleft size-full wp-image-2219&quot; src=&quot;http://20094-presscdn.pagely.netdna-cdn.com/wp-content/uploads/2017/10/growupgirl.gif&quot; alt=&quot;Cartoon people holding up letters that spell MORGAN&quot; width=&quot;249&quot; height=&quot;153&quot; /&gt;With that idea in mind, I started gradually spreading the word among my new “mom” friends, and before I knew it, about 5 years later, with a second child and a wonderful network of moms, I had a full-fledged stationery business, TLC by TARA, that allowed me to work from home and take care of my kids. My income was low, but grew over the years until it covered piano lessons for my children and a car payment on an awesome blue Dodge mini van!&lt;/p&gt;
     154&lt;blockquote&gt;&lt;p&gt;More importantly, this “accidental” career allowed me to broaden my identity and skill set without even intending to.&lt;/p&gt;&lt;/blockquote&gt;
     155&lt;p&gt;It introduced me to wonderful friends and fellow entrepreneurs, and satisfied that craving for validation, connection, and a little bit of income.&lt;/p&gt;
     156&lt;h3&gt;Pivoting to the Web&lt;/h3&gt;
     157&lt;p&gt;The business began before the internet was “a thing” and before computers were widely used. By 2003, however, I began to explore digital tools and built a website for my business using Microsoft Front Page. I uploaded hundreds of illustrations and laid them out in html tables.&lt;/p&gt;
     158&lt;p&gt;&lt;a href=&quot;http://20094-presscdn.pagely.netdna-cdn.com/wp-content/uploads/2017/10/screenshot_2017-10-10_12.21.58_1024.png&quot;&gt;&lt;img class=&quot;alignleft wp-image-2218&quot; src=&quot;http://20094-presscdn.pagely.netdna-cdn.com/wp-content/uploads/2017/10/screenshot_2017-10-10_12.21.58_1024.png&quot; alt=&quot;Example of design library by Tara Claeys&quot; width=&quot;350&quot; height=&quot;360&quot; /&gt;&lt;/a&gt;I fell in love with technology and eventually decided to stop making stationery. I got rid of my industrial printer, paper cutter, paper, and supplies and changed my business name to Design TLC to focus on graphic and web design. I had heard about WordPress and volunteered to build a new website for my neighborhood association and a local women’s cycling group to check out the platform, practice and learn. I taught myself how to make custom child themes and combined that with my marketing background to create websites for a number of small local businesses.&lt;/p&gt;
     159&lt;h3&gt;And then WordCamp&lt;/h3&gt;
     160&lt;p&gt;It wasn’t until 2014 that I discovered the WordPress community. I heard about “WordCamps” and found one near me, in Baltimore, Maryland. By chance I sat at a lunch table with two strangers who I later learned were quite well known in the WordPress world &amp;#8211; Chris Lema and Shay Bocks. They were so friendly and supportive, answering my many questions and offering tips and advice that changed my approach to website design and to running my business. I still think back to that experience as transformative; having lived in a bubble for the first years of working with WordPress, it was eye-opening to discover its community and resources.&lt;/p&gt;
     161&lt;p&gt;I quickly started absorbing everything I could about WordPress. I live-streamed WordCamp San Francisco in 2014, and joined Slack and Facebook groups. I started listening to a ton of WordPress podcasts and attended WordCamp Philadelphia and WordCamp New York City. I began attending the DC WordPress Meetup, where eventually one of the organizers encouraged me to speak about Genesis for a lightning talk. I couldn’t believe I was suddenly in a position of authority &amp;#8211; sharing my knowledge with others when I felt like everything was still so new to me.&lt;/p&gt;
     162&lt;blockquote&gt;&lt;p&gt;Like many in our community, I am plagued by imposter syndrome.&lt;/p&gt;&lt;/blockquote&gt;
     163&lt;p&gt;Relative to many, I am still new to WordPress and I am not a trained coder/programmer. I am also self-consciously older than many people I meet, and still sometimes think of myself as a “Mompreneur.” I am constantly making choices about what to learn next and where to focus my time and resources. Most importantly, I think about how I can run a business while also giving back to the community that has welcomed me and given me so much. I love the mission of HeroPress &amp;#8211; giving a voice to others like me, who may often &lt;em&gt;feel&lt;/em&gt; insignificant but whose lives have been inspired and enhanced by the WordPress community.  With this vision in mind, this year Liam Dempsey and I started the podcast Hallway Chats, where we introduce and talk to people who use WordPress. Like HeroPress, we hope these stories inspire someone else who in turn will keep the cycle of sharing and encouragement going!&lt;/p&gt;
     164&lt;blockquote&gt;&lt;p&gt;The spirit of WordPress is “paying it forward” and I think that is the best kind of payment there is.&lt;/p&gt;&lt;/blockquote&gt;
     165&lt;div class=&quot;rtsocial-container rtsocial-container-align-right rtsocial-horizontal&quot;&gt;&lt;div class=&quot;rtsocial-twitter-horizontal&quot;&gt;&lt;div class=&quot;rtsocial-twitter-horizontal-button&quot;&gt;&lt;a title=&quot;Tweet: Paying It Forward&quot; class=&quot;rtsocial-twitter-button&quot; href=&quot;https://twitter.com/share?text=Paying%20It%20Forward&amp;via=heropress&amp;url=https%3A%2F%2Fheropress.com%2Fessays%2Fpaying-it-forward%2F&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;rtsocial-fb-horizontal fb-light&quot;&gt;&lt;div class=&quot;rtsocial-fb-horizontal-button&quot;&gt;&lt;a title=&quot;Like: Paying It Forward&quot; class=&quot;rtsocial-fb-button rtsocial-fb-like-light&quot; href=&quot;https://www.facebook.com/sharer.php?u=https%3A%2F%2Fheropress.com%2Fessays%2Fpaying-it-forward%2F&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;rtsocial-linkedin-horizontal&quot;&gt;&lt;div class=&quot;rtsocial-linkedin-horizontal-button&quot;&gt;&lt;a class=&quot;rtsocial-linkedin-button&quot; href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fheropress.com%2Fessays%2Fpaying-it-forward%2F&amp;title=Paying+It+Forward&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Share: Paying It Forward&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;rtsocial-pinterest-horizontal&quot;&gt;&lt;div class=&quot;rtsocial-pinterest-horizontal-button&quot;&gt;&lt;a class=&quot;rtsocial-pinterest-button&quot; href=&quot;https://pinterest.com/pin/create/button/?url=https://heropress.com/essays/paying-it-forward/&amp;media=https://heropress.com/wp-content/uploads/2017/10/102817-150x150.jpg&amp;description=Paying It Forward&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Pin: Paying It Forward&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;a rel=&quot;nofollow&quot; class=&quot;perma-link&quot; href=&quot;https://heropress.com/essays/paying-it-forward/&quot; title=&quot;Paying It Forward&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The post &lt;a rel=&quot;nofollow&quot; href=&quot;https://heropress.com/essays/paying-it-forward/&quot;&gt;Paying It Forward&lt;/a&gt; appeared first on &lt;a rel=&quot;nofollow&quot; href=&quot;https://heropress.com&quot;&gt;HeroPress&lt;/a&gt;.&lt;/p&gt;</description>
     166        <pubDate>Wed, 25 Oct 2017 12:00:23 +0000</pubDate>
     167        <dc:creator>Tara Claeys</dc:creator>
     168</item>
     169<item>
     170        <title>Dev Blog: WordPress 4.9 Beta 4</title>
     171        <guid>https://wordpress.org/news/?p=4962</guid>
     172        <link>https://wordpress.org/news/2017/10/wordpress-4-9-beta-4/</link>
     173        <description>&lt;p&gt;WordPress 4.9 Beta 4 is now available!&lt;/p&gt;
     174&lt;p&gt;&lt;strong&gt;This software is still in development,&lt;/strong&gt; so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.9, try the &lt;a href=&quot;https://wordpress.org/plugins/wordpress-beta-tester/&quot;&gt;WordPress Beta Tester&lt;/a&gt; plugin (you’ll want “bleeding edge nightlies”). Or you can &lt;a href=&quot;https://wordpress.org/wordpress-4.9-beta4.zip&quot;&gt;download the beta here&lt;/a&gt; (zip).&lt;/p&gt;
     175&lt;p&gt;For more information on what’s new in 4.9, check out the &lt;a href=&quot;https://wordpress.org/news/2017/10/wordpress-4-9-beta-1/&quot;&gt;Beta 1&lt;/a&gt; blog post. Since the Beta 1 release, we’ve made &lt;a href=&quot;https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41846&amp;stop_rev=41777&amp;limit=100&amp;sfp_email=&amp;sfph_mail=&quot;&gt;70 changes&lt;/a&gt; in Beta 2, and &lt;a href=&quot;https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=41938&amp;stop_rev=41847&amp;limit=100&amp;sfp_email=&amp;sfph_mail=&quot;&gt;92 changes&lt;/a&gt; in &lt;a href=&quot;https://wordpress.org/news/2017/10/wordpress-4-9-beta-3/&quot;&gt;Beta 3&lt;/a&gt;. In Beta 4, we&amp;#8217;ve made &lt;a href=&quot;https://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&amp;mode=stop_on_copy&amp;rev=42020&amp;stop_rev=41940&amp;limit=100&amp;sfp_email=&amp;sfph_mail=&quot;&gt;80 changes&lt;/a&gt;, focusing on bug fixes and finalizing new features.&lt;/p&gt;
     176&lt;p&gt;Do you speak a language other than English? &lt;a href=&quot;https://translate.wordpress.org/projects/wp/dev&quot;&gt;Help us translate WordPress into more than 100 languages!&lt;/a&gt;&lt;/p&gt;
     177&lt;p&gt;&lt;strong&gt;If you think you’ve found a bug&lt;/strong&gt;, you can post to the &lt;a href=&quot;https://wordpress.org/support/forum/alphabeta&quot;&gt;Alpha/Beta area&lt;/a&gt; in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, &lt;a href=&quot;https://make.wordpress.org/core/reports/&quot;&gt;file one on WordPress Trac&lt;/a&gt;, where you can also find &lt;a href=&quot;https://core.trac.wordpress.org/tickets/major&quot;&gt;a list of known bugs&lt;/a&gt;.&lt;/p&gt;
     178&lt;p&gt;&lt;i&gt;Beta 4 at last,&lt;br /&gt;
     179RC 1 draws ever near.&lt;br /&gt;
     180Let&amp;#8217;s make it bug-free. &lt;img src=&quot;https://s.w.org/images/core/emoji/2.3/72x72/1f41b.png&quot; alt=&quot;🐛&quot; class=&quot;wp-smiley&quot; /&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/2.3/72x72/1f6ab.png&quot; alt=&quot;🚫&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/i&gt;&lt;/p&gt;</description>
     181        <pubDate>Wed, 25 Oct 2017 07:04:47 +0000</pubDate>
     182        <dc:creator>Mel Choyce</dc:creator>
     183</item>
     184<item>
     185        <title>WPTavern: WooCommerce Retires Canvas Theme, Recommends Customers Migrate to Storefront Theme</title>
     186        <guid>https://wptavern.com/?p=75984</guid>
     187        <link>https://wptavern.com/woocommerce-retires-canvas-theme-recommends-customers-migrate-to-storefront-theme</link>
     188        <description>&lt;p&gt;WooCommerce is &lt;a href=&quot;https://woocommerce.com/2017/10/saying-goodbye-to-canvas/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;retiring its Canvas Theme&lt;/a&gt; after seven years. Canvas was one of the most innovative themes on the market when it first launched in 2010, giving customers the ability to modify their sites&amp;#8217; design and layout through an extensive options panel. It sold for $99 before the &lt;a href=&quot;https://woocommerce.com/products/canvas/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;product URL&lt;/a&gt; was redirected to a retirement page today.&lt;/p&gt;
     189&lt;p&gt;Canvas&amp;#8217; retirement is a strong signal that Automattic is going all-in on Gutenberg. Without a complete overhaul, the theme is no longer able to keep pace with the changes that Gutenberg and the Customizer will bring to WordPress theming and site building.&lt;/p&gt;
     190&lt;p&gt;&amp;#8220;While still early, we believe strongly that Gutenberg is the future,&amp;#8221; Canvas lead developer Jeffrey Pearce said. &amp;#8220;We’ve decided to invest our resources in preparing our products for it in order to bring you the best experience. Unfortunately, that won’t include Canvas.&amp;#8221;&lt;/p&gt;
     191&lt;p&gt;WooCommerce has discontinued Canvas sales and will not be open sourcing the theme to the community.&lt;/p&gt;
     192&lt;p&gt;&amp;#8220;Overhauling the theme wouldn’t serve our users, yet continuing to sell it as-is wasn’t the right decision. So we made the difficult decision to say goodbye,&amp;#8221; Pearce said.&lt;/p&gt;
     193&lt;p&gt;&amp;#8220;We considered open sourcing Canvas to the community, but ultimately decided that extending its lifetime will not serve the community. It’s in the best interest of our users and the community to eventually move to another theme.&amp;#8221;&lt;/p&gt;
     194&lt;p&gt;WooCommerce plans to continue supporting active subscriptions and will offer support for lifetime subscriptions for the next year. However, the theme will not be updated to support newer features coming to WordPress. The team strongly urges users to migrate their sites to &lt;a href=&quot;https://woocommerce.com/storefront/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Storefront&lt;/a&gt;, the company&amp;#8217;s more mobile-friendly flagship theme built on top of the Underscores starter theme. WooCommerce has published a &lt;a href=&quot;https://docs.woocommerce.com/document/choose-change-theme/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt; to help customers &lt;a href=&quot;https://docs.woocommerce.com/document/moving-on-from-canvas/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;move on from Canvas&lt;/a&gt;.&lt;/p&gt;
     195&lt;p&gt;Over the years customers have created many different types of websites (not limited to e-commerce) using Canvas. While some have accepted the inevitable, others are anxious and upset about the change, faced with the prospect of migrating dozens of sites (in many instances) away from the theme. The news of Canvas&amp;#8217; retirement was especially difficult for those who support clients who may not be happy to pay for their existing sites to get updated with no appreciable difference. It&amp;#8217;s not easy to sell the change to clients when most of it happens under the hood.&lt;/p&gt;
     196&lt;p&gt;&amp;#8220;This puts me in a terrible position,&amp;#8221; WooCommerce customer Leon Wagner said. &amp;#8220;I have 10 client sites on Canvas. They look beautiful and the clients are happy. So these are done deals, I’ve been paid, and do occasional maintenance. Now you’re telling me I have to go back to each of them and explain that because you’re discontinuing this theme, my clients will now have to pay me thousands of dollars to port their sites (with no obvious improvements) to new themes. Pretty sure I’ll just lose most of those clients.&amp;#8221;&lt;/p&gt;
     197&lt;p&gt;Other freelancers and small business owners find themselves in the same boat, many of them with twice that many clients on the Canvas theme. Although the theme can continue to be used without breaking, it will no longer receive compatibility or security updates after the support window expires in October 2018. WooCommerce is currently giving away its Storefront Extensions Bundle for free to Canvas customers to help make the migration easier.&lt;/p&gt;</description>
     198        <pubDate>Tue, 24 Oct 2017 23:53:11 +0000</pubDate>
     199        <dc:creator>Sarah Gooding</dc:creator>
     200</item>
     201<item>
     202        <title>WPTavern: Gutenberg 1.5 Adds Initial Support for Meta Boxes, Makes Gutenberg the Default Editor</title>
     203        <guid>https://wptavern.com/?p=75853</guid>
     204        <link>https://wptavern.com/gutenberg-1-5-adds-initial-support-for-meta-boxes-makes-gutenberg-the-default-editor</link>
     205        <description>&lt;p&gt;&lt;a href=&quot;https://make.wordpress.org/core/2017/10/24/whats-new-in-gutenberg-24th-october/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Gutenberg 1.5&lt;/a&gt; was released this morning and introduces several major changes to the plugin. This version takes the new editor off the back burner and makes it the default for creating new posts. The team has also included a way for users to create posts with the Classic Editor, but this requires knowing where to go to access the dropdown (All Posts &amp;raquo; Add New).&lt;/p&gt;
     206&lt;p&gt;&lt;a href=&quot;https://i0.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-24-at-11.12.41-AM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     207&lt;p&gt;Version 1.5 &lt;a href=&quot;https://github.com/WordPress/gutenberg/pull/2804&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;adds initial support for meta boxes&lt;/a&gt; in an Extended Settings panel beneath the post content. Users won&amp;#8217;t see this bottom panel unless they have a plugin installed that includes meta boxes. The sidebar Settings panel must already be toggled open for the bottom panel to appear.&lt;/p&gt;
     208&lt;p&gt;&lt;a href=&quot;https://i2.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-24-at-1.04.55-PM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     209&lt;p&gt;The Extended Settings panel slides up to reveal accordion toggles for plugins that have meta box settings available. The design could use some improvement, especially for navigating back to the post editor. The panel takes over the entire section. On installations with lots of legacy meta boxes it is easy to get lost in all the open/closed toggles.&lt;/p&gt;
     210&lt;p&gt;&lt;a href=&quot;https://i2.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-24-at-1.19.36-PM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     211&lt;p&gt;Gutenberg design lead Tammie Lister said this is the first step towards supporting meta boxes and that there will be iterations to follow. She also warned that it is possible some advanced meta box uses will not work as expected. The Gutenberg team is eager to receive feedback on these cases and will work to find solutions for them. Testers who discover issues with meta box support can &lt;a href=&quot;https://github.com/WordPress/gutenberg/issues/new&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;post an issue on GitHub&lt;/a&gt; or via the plugin&amp;#8217;s feedback form, describing the setup and how to reproduce what is breaking.&lt;/p&gt;
     212&lt;p&gt;Version 1.5 also adds &lt;a href=&quot;https://github.com/WordPress/gutenberg/pull/3008&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;a new inserter button between blocks&lt;/a&gt;, which Gutenberg engineer Matias Ventura demonstrated with an animated gif in the release post:&lt;/p&gt;
     213&lt;p&gt;&lt;a href=&quot;https://i1.wp.com/wptavern.com/wp-content/uploads/2017/10/gutenberg-insert-between.gif?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     214&lt;p&gt;This release &lt;a href=&quot;https://github.com/WordPress/gutenberg/pull/2887&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;adds a dropdown to the Publish button&lt;/a&gt;. It currently supports visibility and post scheduling features.&lt;/p&gt;
     215&lt;p&gt;&lt;a href=&quot;https://i1.wp.com/wptavern.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-24-at-2.25.58-PM.png?ssl=1&quot;&gt;&lt;img /&gt;&lt;/a&gt;&lt;/p&gt;
     216&lt;p&gt;There was a great deal of discussion on GitHub surrounding the UI for the publish button, whether it should be a split button dropdown or a single button that provides slightly more friction to prevent accidental publishing. The general consensus was that introducing a bit more friction is desirable, as contributor Davide Casali noted there are many cascading actions that are often tied to the Publish button:&lt;/p&gt;
     217&lt;p&gt;&amp;#8220;Some automated publishing actions are irreversible: pings gets sent, emails get sent, Facebook and Twitter gets updates, etc.,&amp;#8221; Casali said. &amp;#8220;This is very very important for a lot of people and businesses, and nobody wants to send out such actions by accident.&amp;#8221;&lt;/p&gt;
     218&lt;p&gt;Contributors are looking for feedback on this implementation and are willing to explore some alternate design options as well. They agreed that it is more important to make the Publish button area pluggable and to work on adapting it based on feedback.&lt;/p&gt;
     219&lt;p&gt;For those who want to completely disable Gutenberg, a new plugin called &lt;a href=&quot;https://wordpress.org/plugins/classic-editor/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Classic Editor&lt;/a&gt; is available on WordPress.org and ready for testing. It requires WordPress 4.9-beta2 or newer and Gutenberg version 1.5+. Classic Editor comes with two modes that give users the option to fully replace Gutenberg or allow access to both the old and new editors:&lt;/p&gt;
     220&lt;ul&gt;
     221&lt;li&gt;Fully replaces the Gutenberg editor and restores the Edit Post template.&lt;/li&gt;
     222&lt;li&gt;Adds alternate “Edit” links to the Posts and Pages screens, on the toolbar at the top of the screen, and in the admin menu. Using these links will open the corresponding post or page in the Classic Editor.&lt;/li&gt;
     223&lt;/ul&gt;
     224&lt;p&gt;A setting for switching between the modes is available at Settings &amp;raquo; Writing. Other plugins for turning Gutenberg off will likely pop up the closer the it gets to being included in core, but Classic Editor is the official one recommended by core contributors.&lt;/p&gt;
     225&lt;p&gt;The timeline for the merge proposal is not yet set in stone but the Gutenberg team aims to get it more widely tested before writing the proposal. The &lt;a href=&quot;https://wordpress.org/plugins/gutenberg/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;plugin&lt;/a&gt; is currently active on approximately 3,000 WordPress sites.&lt;/p&gt;
     226&lt;p&gt;&amp;#8220;The plan is to still have the plugin ready by December, but with holidays the actual merge proposal might be next year,&amp;#8221; Tammie Lister said. &amp;#8220;It’s important that we get as many users and as much feedback as possible at this point. All of that impacts what happens going forward.&amp;#8221;&lt;/p&gt;</description>
     227        <pubDate>Tue, 24 Oct 2017 20:51:26 +0000</pubDate>
     228        <dc:creator>Sarah Gooding</dc:creator>
     229</item>
     230</channel>
     231</rss>
  • new file tests/phpunit/tests/admin/includes-dashboard.php

    diff --git tests/phpunit/tests/admin/includes-dashboard.php tests/phpunit/tests/admin/includes-dashboard.php
    new file mode 100644
    index 0000000..d1259a4
    - +  
     1<?php
     2/**
     3 * Tests for the admin dashboard.
     4 *
     5 * @package WordPress
     6 * @subpackage UnitTests
     7 * @since x.x.x
     8 */
     9
     10/**
     11 * Class Test_Dashboard
     12 *
     13 * @group admin
     14 * @group dashboard
     15 *
     16 * @since x.x.x
     17 */
     18class Test_WP_Dashboard extends WP_UnitTestCase {
     19
     20        /**
     21         * Setup before class
     22         */
     23        public static function setUpBeforeClass() {
     24                require_once ABSPATH . 'wp-admin/includes/dashboard.php';
     25        }
     26
     27        /**
     28         * Tests wp_widget_rss_get_entries().
     29         *
     30         * @since x.x.x
     31         * @ticket 42254
     32         * @dataProvider feed_data
     33         *
     34         * @param array $args Arguments.
     35         * @param array $expected Expected data.
     36         */
     37        public function test_wp_widget_rss_get_entries( $args, $expected ) {
     38
     39                // Consider only the first feed entry.
     40                $expected      = reset( $expected );
     41                $args['items'] = 1;
     42
     43                // Actual entries from a local feed.
     44                add_action( 'wp_feed_options', array( $this, 'set_local_feed' ), 10, 2 );
     45                $entries = wp_widget_rss_get_entries( $args['url'], $args );
     46                remove_action( 'set_local_feed', array( $this, 'set_local_feed' ) );
     47
     48                $this->assertSame( $args['items'], count( $entries ) );
     49                foreach ( $entries as $actual ) {
     50                        $this->assertSame( $expected['title'], $actual['title'] );
     51                        $this->assertSame( $expected['link'], $actual['link'] );
     52                        $this->assertSame( $expected['summary'], $actual['summary'] );
     53                        $this->assertSame( $expected['author'], $actual['author'] );
     54                        $this->assertSame( $expected['date'], $actual['date'] );
     55                }
     56        }
     57
     58        /**
     59         * Tests wp_widget_rss_output().
     60         *
     61         * @since x.x.x
     62         * @ticket 42254
     63         * @dataProvider feed_data
     64         *
     65         * @param array $args Arguments.
     66         * @param array $expected Expected data.
     67         */
     68        public function test_wp_widget_rss_output( $args, $expected ) {
     69
     70                // Consider only the first feed entry.
     71                $expected      = reset( $expected );
     72                $args['items'] = 1;
     73
     74                // Actual output with local feeds.
     75                add_action( 'wp_feed_options', array( $this, 'set_local_feed' ), 10, 2 );
     76                wp_widget_rss_output( $args['url'], $args );
     77                remove_action( 'wp_feed_options', array( $this, 'set_local_feed' ) );
     78
     79                // Expected output.
     80                $expected_output = sprintf(
     81                        "<ul><li><a class='rsswidget' href='%s'>%s</a></li></ul>",
     82                        $expected['link'],
     83                        $expected['title']
     84                );
     85                $this->expectOutputString( $expected_output );
     86        }
     87
     88        /**
     89         * Tests wp_dashboard_primary_output() - Shouldn't have duplicated entries.
     90         *
     91         * @since x.x.x
     92         * @ticket 42254
     93         */
     94        public function test_wp_dashboard_primary_output_should_not_have_duplicated_entries() {
     95                $data = $this->feed_data();
     96
     97                // Setup feeds arguments.
     98                $feeds = array(
     99                        'news'   => $data['news']['args'],
     100                        'planet' => $data['planet']['args'],
     101                );
     102
     103                // Adjust the display count for each feed.
     104                $feeds['news']['items']   = 1;
     105                $feeds['planet']['items'] = 3;
     106
     107                // Actual output with local feeds.
     108                add_action( 'wp_feed_options', array( $this, 'set_local_feed' ), 10, 2 );
     109                wp_dashboard_primary_output( 'test', $feeds );
     110                remove_action( 'wp_feed_options', array( $this, 'set_local_feed' ) );
     111
     112                // Expected output, skip the first (duplicated) item from the Planet feed.
     113                $expected_output    = '';
     114                $expected           = array();
     115                $expected['news']   = array_slice( $data['news']['expected'], 0, $feeds['news']['items'] );
     116                $expected['planet'] = array_slice( $data['planet']['expected'], 1, $feeds['planet']['items'] );
     117                foreach ( $expected as $items ) {
     118                        $li = '';
     119                        foreach ( $items as $item ) {
     120                                $li .= sprintf(
     121                                        "<li><a class='rsswidget' href='%s'>%s</a></li>",
     122                                        $item['link'],
     123                                        $item['title']
     124                                );
     125                        }
     126                        $expected_output .= sprintf( '<div class="rss-widget"><ul>%s</ul></div>', $li );
     127                }
     128                $this->expectOutputString( $expected_output );
     129        }
     130
     131        /**
     132         * Callback - Make sure the fetch_feed() (SimplePie) uses local XML data.
     133         *
     134         * @since x.x.x
     135         * @ticket 42254
     136         *
     137         * @param object $feed SimplePie feed object.
     138         * @param mixed  $url  URL of feed to retrieve.
     139         */
     140        public function set_local_feed( $feed, $url ) {
     141                $data = $this->feed_data();
     142
     143                // Relation between a feed url and a local XML test file.
     144                $xml_files = array(
     145                        $data['planet']['args']['url'] => 'planet.xml',
     146                        $data['news']['args']['url']   => 'news.xml',
     147                );
     148
     149                // Avoid fetching the real feed. We can't use the
     150                // set_feed_url( null ) method, because then the url becomes
     151                // 'http://?#', overriding the set_raw_data() method.
     152                $feed->feed_url = null;
     153
     154                // Set a local XML test file as raw data, for the SimplePie instance.
     155                if ( isset( $xml_files[ $url ] ) ) {
     156                        $feed->set_raw_data( file_get_contents( DIR_TESTDATA . '/feeds/news/' . $xml_files[ $url ] ) );
     157                }
     158
     159                // Disable caching.
     160                $feed->enable_cache( false );
     161        }
     162
     163        /**
     164         * Dataprovider for test_wp_widget_rss_get_entries() and test_wp_widget_rss_output.
     165         *
     166         * @since x.x.x
     167         * @ticket 42254
     168         *
     169         * @return array {
     170         *     @type array $0... {
     171         *         @type array $0 Arguments.
     172         *         @type array $1 Expected data.
     173         *     }
     174         * }
     175         */
     176        public function feed_data() {
     177                return array(
     178                        'news'   => array(
     179                                'args'     => array(
     180                                        'link'         => 'https://wordpress.org/news/',
     181                                        'url'          => 'https://wordpress.org/news/feed/',
     182                                        'title'        => 'Other WordPress News',
     183                                        'items'        => 1,
     184                                        'show_summary' => 0,
     185                                        'show_author'  => 0,
     186                                        'show_date'    => 0,
     187                                ),
     188                                'expected' => array(
     189                                        array(
     190                                                'title'   => '2017 WordPress Survey and WordCamp US',
     191                                                'link'    => 'https://wordpress.org/news/2017/10/2017-wordpress-survey-and-wordcamp-us/',
     192                                                'date'    => '',
     193                                                'summary' => '',
     194                                                'author'  => '',
     195                                        ),
     196                                ),
     197                        ),
     198                        'planet' => array(
     199                                'args'     => array(
     200                                        'link'         => 'https://planet.wordpress.org',
     201                                        'url'          => 'https://planet.wordpress.org/feed/',
     202                                        'title'        => 'WordPress Blog',
     203                                        'items'        => 4,
     204                                        'show_summary' => 0,
     205                                        'show_author'  => 0,
     206                                        'show_date'    => 0,
     207                                ),
     208                                'expected' => array(
     209                                        array(
     210                                                'title'   => 'Dev Blog: 2017 WordPress Survey and WordCamp US',
     211                                                'link'    => 'https://wordpress.org/news/2017/10/2017-wordpress-survey-and-wordcamp-us/',
     212                                                'date'    => '',
     213                                                'summary' => '',
     214                                                'author'  => '',
     215                                        ),
     216                                        array(
     217                                                'title'   => 'WPTavern: WordPress 4.9 Will Support Shortcodes and Embedded Media in the Text Widget',
     218                                                'link'    => 'https://wptavern.com/wordpress-4-9-will-support-shortcodes-and-embedded-media-in-the-text-widget',
     219                                                'date'    => '',
     220                                                'summary' => '',
     221                                                'author'  => '',
     222                                        ),
     223                                        array(
     224                                                'title'   => 'WPTavern: WPWeekly Episode 292 – Recap of WooConf and CaboPress',
     225                                                'link'    => 'https://wptavern.com/wpweekly-episode-292-recap-of-wooconf-and-cabopress',
     226                                                'date'    => '',
     227                                                'summary' => '',
     228                                                'author'  => '',
     229                                        ),
     230                                        array(
     231                                                'title'   => 'WPTavern: Goodnight Firebug',
     232                                                'link'    => 'https://wptavern.com/goodnight-firebug',
     233                                                'date'    => '',
     234                                                'summary' => '',
     235                                                'author'  => '',
     236                                        ),
     237                                ),
     238                        ),
     239                );
     240        }
     241}