Discussion on Replacing Plugin Active Install Growth Data Continues Behind Closed Doors – WP Tavern

[ad_1] Earlier this month WordPress.org meta contributors removed the active install growth chart from plugins, sending plugin developers who relied on this data into a state of dismay and outrage. The commit cited “insufficient data obfuscation” but there was no clear communication about when and where this decision had been made. Developers demanded more transparency around the charts’ removal but received no clear answers. Multiple opportunities to communicate the details behind the decision were deliberately forgone, as speculation mounted. Several contributors not directly involved in the conversations prematurely insisted it was removed due to a security or privacy concern, but Samuel Otto Wood has unequivocally confirmed that it was neither of these things. In a recent appearance on the WPwatercooler podcast, Wood elaborated on the decision, which he says was made in May through private channels via Slack DMs in a discussion initiated by Matt Mullenweg. “The reason is really quite simple,” Wood said. “It was removed because by and large, nobody was using them. Nobody was using the chart itself. By and large, the chart was not useful to the majority, and it didn’t really fit the purpose we had for it, that we had in mind when we implemented it.” Wood said the active growth chart was intended to just show growth or decline of a plugin on a weekly basis, but the data wasn’t working as intended: People wanted that feedback on whether plugin’s growing, whether it’s shrinking, et cetera. And that’s valuable information for developers to have, it’s valuable information users to know. But it really wasn’t working as that. The data that it provided was a percentage based data, and it was a very weak percentage based data. So by and large, the majority of use of that data was people scraping the data and using it to work backwards to the exact quote, exact numbers That was entirely the problem was that people were largely using it to get those numbers. Now, that’s not itself bad, but a, the reverse math didn’t work. It was wrong for a number of reasons, mainly because we were doing such a way obfuscating the data in such a way that it made that number wrong. Second, Actually, it’s kind of funny. It actually always gave numbers a bit too high, so it was giving people the wrong impression. Third, it really, people trusted it as an active number, as a number of active cells to the point where, to the point where they, they relied on it to make decisions and things like that. It was not a good idea. Although Otto was not involved in working on the project at the time, he was privy to the discussion and relayed some of the details: I read through all that discussion and we worked, they worked on it for a long, Scott and several people tried various things before removing it. They adjusted the values, they adjusted numbers. They, they went through a ridiculous amount of iteration and in the end, none of it worked. People were still using it even though it was giving them basically garbage. So finally removing it was the only thing to do. We did have a plan for replacing it. We just didn’t have a plan for replacing it immediately. Nevertheless, giving them active install count numbers that are wrong is more harmful, we felt, to both users and developers interests than simply not giving them at all. So that’s why it was removed. The concern podcast host Sé Reed and guest Matt Cromwell highlighted was that the decision was communicated in such a way that it suggested it was security related. Since it was not a sensitive security or privacy issue, Reed asked why was it handled in a private chat instead of the meta channel when the decision had such a profound impact on developers being able to track the trajectory of their plugins. Since the inaccuracy of the charts was well-known to those more intimately acquainted with the problem, Wood said its removal was “not quite the big deal” that everyone else ended up perceiving it to be. They did not anticipate the firestorm the charts’ removal would create in the trac ticket where developers were pleading to have them restored. “The physical visual chart itself is not so instrumental to the way I operate things,” GiveWP founder Matt Cromwell said. “But it’s the act of removing it without any conversation whatsoever. “And what does that mean for the long run of data about plugins on.org and the viability of their, of us, continuing to have them? That’s the real question. It’s an indicator of an underlying problem that isn’t getting better.” This incident has sparked discussions about what kind of partnership plugin developers should expect from WordPress.org, and whether it’s time they looked for support from one another instead of the platform, as Eric Karkovack suggested on The WP Minute. In light of plugin developers losing more valuable data that hasn’t been replaced, Alex Denning, managing director of Ellipsis, a digital marketing agency, makes the case that WordPress.org is ineffective for plugin distribution in 2022. He contends that new WordPress plugins are not passing the 100k, 500k , or 1m+ install thresholds and the directory isn’t giving plugins organic reach. The focus of the ticket has changed from calling on WordPress.org to bring back the active growth charts to be more about brainstorming helpful plugin stats and insights that plugin developers would like to see. It is still receiving angry and frustrated comments from developers who believe the data should belong to the community. “I cannot emphasize enough that conversations about what to replace the active growth chart with should be happening in a public Slack channel or on a Trac ticket,” Equalize Digital CEO Amber Hinds said. “This data should belong to the community and the community should be able to participate in deciding how (or not) to display it.” The reasons that purportedly necessitate obfuscation have

Continue reading

Get Data Insights to Fuel Your Ecommerce Business

[ad_1] Do your customers zigzag between your ecommerce site, social media profiles, blog, and marketplace product listings? Then you probably find it challenging to gain insights that enable you to craft a personalized experience at scale. Personalized experiences are important—71% of consumers expect brands to deliver them. And 76% get frustrated when this doesn’t happen. Large b2C ecommerce brands know this and design systems to consolidate omnichannel data, which enables them to tailor experiences with better insights.  While you may not have the resources to design such a system, you do have the opportunity to use software that offers the same level of access to your data as the big brands. Custimy is an all-in-one CDP software that provides small and medium-sized companies with the insights they need to fuel their customer experience. Its founders mixed extensive knowledge from the ecommerce and marketing world with a no-code approach, cloud solution, and artificial intelligence to create a customer data platform that blurs the lines between SMBs and enterprises.But exactly what data is used in Custimy? What are its salient features? How does it compare to a CRM? In this detailed Custimy review, I’ll give you all the answers and explain how you can use Custimy to build a better and stronger business. Custimy Customer Data Platform – Overview and Key Features Custimy is a robust CDP that provides the foundation to ensure that your customer data insights and analysis are consistent across all your channels, tools, or platform.  It does this by tracking identifiers from your different channels and unifying them in the CDP. These identifiers are based on demographics, personal information, transactional data, and more.   Many other CDPs base identifiers on device ID or cookie ID, but with third-party cookies being phased out, this is no longer a long-term or viable solution. Article Continues Below Custimy serves as the foundation of your customer data, enabling your teams and tools that use the platform to become more insightful. Here are some of its key capabilities: Acquire the right customers Typically, companies look at ROAS (Return On Ad Spend) and POAS (Profit On Ad Spend) to evaluate the customer’s profitability. But these KPIs only offer a glimpse of the view, and you risk losing out on gaining the right customers. Custimy looks at customers’ behavior, traits, and lifetime value (LTV). It lets you identify your most valuable customers based on these KPIs and synchronizes segments automatically to your marketing channels.  This automated, data-driven approach ensures the consistent acquisition of new profitable customers with an expected higher lifetime value. Retain existing customers Getting our customers to repurchase is not easy. That’s because it’s difficult to track their post-purchase behavior and determine when they are ready to buy. Custimy improves your odds of retaining customers by forecasting their buying propensity, identifying their behavior, and tracking their behavior and spending habits within your brand ecosystem (webshop, emails, socials, etc.).  AI algorithms in Custimy update audiences for email flows and repaid targeting, making it easier to identify those ready to buy. This helps you avoid losing a customer to your competitors because you didn’t act when they were ready to purchase. Improve marketing results Data-driven marketing is all about ensuring the right customers are exposed to your brand, products, and categories. In other words, you need to feed your marketing channels with the necessary audience signals to outshine the competition and improve your ROI. Custimy helps you take an AI and Machine learning approach to building value-based audience segments. Additionally, it sends updated audience signals to marketing channels like Snapchat, TikTok, Facebook, and Google Ads, allowing you to target the right customers at the right moment across their preferred channels.  Moreover, Custimy’s CAPI (conversion API) integration allows you to reclaim your tracking and conversion ability. It presents opportunities you haven’t seen since iOS 14, tracking actions across your entire marketing funnel so you know where to tune them for maximum ROI. Minimize return rate Ecommerce return affects many more aspects of your business than you might think. Your logistics, customer support, and shipment provider all get an additional responsibility, while you lose out on a sweet sale. Ecommerce return affects many more aspects of your business than you might think. Your logistics, customer support, and shipment provider all get an additional responsibility while you lose out on a sweet sale. Ultimately, a high return rate will cause you to lose both profits and revenue. Minimizing these extra costs while keeping your revenue is key to growing your ecommerce business. With that knowledge, you can better decide where to increase product information, which items to stop advertising, or even what goods to completely cut out due to too many returns. Along the same lines, targeting customers with products they are more likely to keep can help you cut costs and keep money flowing into your store. Increase overall profits Custimy also provides complete insights into your products and first-hand knowledge of what customers are buying (and keeping) those items. With a few clicks, you can get insights that reveal your best-performing products. You can then allocate more budget toward them to boost your bottom line. Custimy Insights Cockpit Besides the above features, Custimy gives you a full picture of all your data by integrating every channel with customer touchpoints. It automates the whole process for you and ensures you can easily find all your KPIs in one place, i.e., Custimy Insights Cockpit. And with easy reporting, you save valuable hours spent on gathering data from different resources, consolidating them in a spreadsheet, and crunching numbers with disparate tools. Also, I loved that Custimy is easy to use and displays your whole business in numbers. Based on my experience using it, it’s really a no-code platform that empowers you to stay ahead of the game with key business insights. Say goodbye to the days of feeling lost in different tools or programs with your data siloed off.  Custimy Data Is First-Party Data   It’s no secret that third-party data

Continue reading

Real Test Data + The Best Settings in 2021

[ad_1] Considering using WP Rocket to speed up your WordPress site? When it comes to WordPress performance plugins, WP Rocket is one of the best-known options. And that’s for a good reason – it’s a really great tool for speeding up your site.  We ran a test for this review and we found that it cut our site’s fully loaded times by 44-61%, which is pretty impressive and important when you consider that page load times affect everything from SEO to bounce rates, conversion rates, user experience, and more. But is it the right plugin for your site and your unique situation? Well, that’s one of the questions that we’re going to answer in our WP Rocket review. Here’s everything that we’re going to cover: Let’s get started! WP Rocket Review: What Does It Do? We don’t want to spend too long here because you can find all of this on the WP Rocket site, but the quick version is that WP Rocket is a full-service WordPress performance plugin.  It aims to offer pretty much everything you need to create a quick-loading WordPress site in one simple package. The “core” feature is page caching. But WP Rocket is a lot more than just another page caching plugin. It also handles: Browser caching. Gzip compression. Code optimization (HTML, CSS, and JavaScript) – you get a lot of different options here including minification, combination, and more. Media optimization – speed up your images and videos. Database cleaning. CDN integration. Various minor performance tweaks – e.g. adjusting the Heartbeat API and disabling embeds. It’s also highly configurable and you’ll get lots of advanced options to control exactly how your caching functions, including a flexible cache preload option. WP Rocket also includes some unique features that you won’t find in other WordPress performance plugins, which I think is one area where it differentiates itself. One of the most interesting features is its new Remove Unused CSS option, which lets you scan your site and remove unnecessary CSS on a page-by-page basis. In my testing, I’ve regularly seen reductions of ~80-250 KB in page size (depending on your theme/plugins) just from this feature alone. It also includes other features to automatically inline critical CSS and delay loading JavaScript.  Overall, the WP Rocket team is always pushing things forward with new and unique features to speed up your site, which is one of the best things about the plugin. WP Rocket Review: Testing the Performance Now, let’s run some performance tests to see just how much WP Rocket can speed up a WordPress site. After all, this is the most meaningful question in our WP Rocket review. To assess this, I set up a realistic WordPress site powered by the Astra theme and one of its Elementor demo sites. This is a full website, just like the website you might be installing WP Rocket on. My website is hosted on a droplet from DigitalOcean, which is pretty speedy hosting just by itself. If you’re hosting on cheap shared hosting, you’ll probably see even better improvements than this test. To collect the data, I’ll use WebPageTest to run tests in two scenarios: Desktop – Chrome browser with a throttled FIOS connection speed (a decent but not fast connection). Mobile – a simulated Moto G4 device with a throttled 4G connection to simulate someone browsing while not connected to WIFI. I’ll configure WebPageTest to run nine separate tests and take the median value. Then, I’ll test before WP Rocket and after installing/configuring WP Rocket using the recommended settings from our tutorial below. Desktop Test LCP Fully Loaded Size HTTP Requests NO WP Rocket 1.252 s 1.443 s 907 KB 52 🚀 With WP Rocket 0.652 s 0.568 s 657 KB 18 ⬇️ Decrease ⬇️ 48%  ⬇️ 61% ⬇️ 250 KB ⬇️ 34 LCP = Largest Contentful Paint, one of Google’s new Core Web Vitals metrics Mobile Test LCP Fully Loaded Size HTTP Requests NO WP Rocket 3.907 s 5.327 s 861 KB 49 🚀 With WP Rocket 0.890 s 3.010 s 610 KB 15 ⬇️ Decrease ⬇️ 77% ⬇️ 44% ⬇️ 251 KB ⬇️ 34 WP Rocket Review: Performance Conclusions The numbers pretty much speak for themselves in the example above: Desktop LCP decreased by 48%. Desktop fully loaded time decreased by 61%. Mobile LCP decreased by 77%. Mobile fully loaded time decreased by 44%. Beyond the huge improvement to page load times, you can see a big reduction in the size of the page, a lot of which comes from the new remove unused CSS and delay JavaScript loading features. Most other WordPress performance plugins won’t be able to achieve such a big reduction in page size because they don’t have these features. Basically, WP Rocket can make your site load a lot faster. So now, let’s talk about the other stuff, like how you can configure WP Rocket for optimal results and whether WP Rocket offers good value from a pricing perspective. Best WP Rocket Settings: How to Configure WP Rocket Now that I’ve shown you the performance data from our WP Rocket review, let’s take a deeper look at the features and go over the optimal WP Rocket settings to achieve the benefits from above. This section will accomplish two things: You’ll learn how WP Rocket works and all the different features it offers. If you do decide to purchase WP Rocket, you can follow this tutorial to configure it on your site. WP Rocket Automatically Activates Core Features First off, as soon as you activate WP Rocket, it will automatically activate some core features. These include: Page caching Browser caching GZIP compression Cross-origin support for web fonts Auto-detection to work with popular plugins (like WooCommerce) However, to get the most from WP Rocket, you’ll want to further configure its settings, which you can access by going to Settings → WP Rocket. Let’s go through each tab in the WP Rocket settings… Cache The Cache tab gives you more control over how page caching

Continue reading

Add Custom Link to All Posts Screen Based on Post Meta Data

[ad_1] TL;DR: This article outlines the code needed to add a custom link on the All Posts screen that uses a custom piece of post metadata. Note: A few months ago, I wrote an article on how to add a custom view to the All Posts screen. This article is not all together the same, but not all together different. Think of it as a more detailed and perhaps for more practical implementation of the concept. Assume that you have a standard post type or a custom post type and you’re going to simply filter by a headline that you define using a mechanism that allows you to save data to the post_metadata table. For example, let’s say that you have a post and it as a piece of meta data with: a meta_key with the value of article_attribute a meta_value with the value of headline And you want to use this information to add a new Headlines link that automatically filters everything out except articles with that metadata. Here’s how to do it. Custom Link on All Posts Screen Before getting started, it’s worth noting that there are two ways to go about tackling this problem: We could add the link at the top of the All Posts page first and then add the functionality for filtering the data second, Or we can do it the other way around where we add the backend logic first then add the All Posts page link. I’m going to opt to start with the second option. There’s no reason why it has to be done this way. It’s my preference. First, I need to hook into the pre_get_posts hook provided by WordPress. I’m not going to be using any namespaced classes or prefixed functions in this example (given that I’ve covered that content enough on this site), but I’ll have demo plugin for this linked at the bottom of the post. Anyway, I’ll start off by adding an anonymous function attached to the aforementioned hook: add_action( ‘pre_get_posts’, function ( WP_Query $query ) { // … } ); Notice that the anonymous function accepts a single argument which is a reference to the current instance of WP_Query that’s running on the page. If you’re not familiar with that class, then I’d recommend reading any of these articles or the Developer Resources page. In the function, I need to check for the presence of a meta_value in the query string. This is easy to do thanks to the filter_input function provided by PHP. add_action( ‘pre_get_posts’, function ( WP_Query $query ) { $meta_value=”headline”; if ( filter_input( INPUT_GET, ‘meta_value’ ) === $meta_value ) { $query->set( ‘meta_key’, ‘article_attribute’ ); $query->set( ‘meta_value’, $meta_value ); } } ); This hook will look to see if the headline value is key for the meta_value key in the query string. If so, it then adds a meta_key and meta_value to the instance of WP_Query which will instruct WordPress to retrieve all of the posts with just that metadata. After that I need to add a a link to the top of the All Posts page to trigger this functionality. To do this, I’ll leverage the views_edit-posts hook. This function will accept an array of anchors that will be displayed at the top of the page. I refer to these as $views so that’s what the function will accept when I stub it out: add_action( ‘views_edit-post’, function ( array $views ) { // … return $views; } ); Note that it’s important to return the array back to WordPress so that it knows what to render even if no modification is made. First, I need to determine if I’m currently on the custom page. If so, then I need to add the proper attributes to the anchor added to the top of the page: // Determine if we’re looking at the Headlines page. $attributes=”class=”””; if ( filter_input(INPUT_GET, ‘meta_value’) === ‘headline’ ) { $attributes=”class=”current aria-current=”page””; } After that, I need to actually add the Headlines view to the page. This will require the use of several functions: array_push for adding a new link to the list of $views sprintf for securely adding a new string add_query_arg for adding a set of custom query arguments to the current page. The next section of code will look like this: // Build the anchor for the ‘Headlines’ view and add it to $views. array_push( $views, sprintf( ‘<a href=”https://tommcfarlin.com/custom-link-all-posts-screen/%1$s” %2$s>%3$s <span class=”count”>(%4$s)</span> </a> ‘, add_query_arg([ ‘post_type’ => ‘post’, ‘post_status’ => ‘all’, ‘meta_value’ => ‘headline’, ], ‘edit.php’), $attributes __(‘Headlines’), count( /* … */ ); ); But I’m not done yet. Notice specifically that I’m making a call to count at the end of the function. This is so that I can properly display the number of posts that have this attribute. I’m going to write two helper functions for this then I’ll return back to the sizeof call. Here’s a helper function for finding the number of results that have the specified meta_key and meta_value that we have for this type of post. Notice that I’m using $wpdb to make a direct database call and that I’m specifically using prepare to make sure I do it safely. function get_headline_results() : array { global $wpdb; return $wpdb->get_results( // phpcs:ignore $wpdb->prepare( ” SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s “, ‘article_attribute’, ‘headline’ ), ARRAY_A ); } Notice that it returns all of the results (not just the number) because this value will be passed into another function momentarily. At this point, we could stop and simply look at the content that’s returned from the query but if we’re just concerned with the post post type, then we’ll need to account for that. Here’s one way to do it: function filter_posts_from_pages( array $results ) : array { $post_ids = array(); foreach ( $results as $result) { if ( ‘post’ === get_post_type( $result[‘post_type’] ) ) { $post_ids[] = $result[‘post_id’]; } } return $post_ids; } With that, we can return this value back to the count function

Continue reading