• Stars
    star
    112
  • Rank 301,320 (Top 7 %)
  • Language
    PHP
  • License
    GNU General Publi...
  • Created over 12 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easily manage the ad codes that need to appear in your templates

Ad Code Manager

Stable tag: 0.6.0
Requires at least: 5.5
Tested up to: 5.9
Requires PHP: 7.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Tags: advertising, ad codes, ads, adsense, dfp, doubleclick for publishers
Contributors: rinatkhaziev, jeremyfelt, danielbachhuber, carldanley, zztimur, automattic, doejo

Manage your ad codes through the WordPress admin in a safe and easy way.

Description

Ad Code Manager gives non-developers an interface in the WordPress admin for configuring your complex set of ad codes.

Some code-level configuration may be necessary to set up Ad Code Manager. Ad tags must be added (via do_action()) to your theme's template files where you'd like ads to appear. Alternatively, you can incorporate ad tags into your website with our widget and our shortcode. Check out the configuration guide below for the full details.

A common set of parameters must also be defined for your ad provider. This includes the tag IDs used by your template, the default URL for your ad provider, and the default HTML surrounding that URL. Ad Code Manager comes with support for Google Doubleclick For Publishers (and Async), and Google AdSense. All the logic is abstracted, however, so configuring a different provider is relatively easy. Check providers/doubleclick-for-publishers.php for an idea of how to extend ACM to suit your needs.

Once this configuration is in place, the Ad Code Manager admin interface will allow you to add new ad codes, modify the parameters for your script URL, and define conditionals to determine when the ad code appears. Conditionals are core WordPress functions like is_page(), is_category(), or your own custom functions that evaluate certain expression and then return true or false.

Fork the plugin on Github and follow our development blog.

Installation

The plugin requires PHP 7.1 or later. It is also test on WordPress 5.5 and later, though it may run on older versions.

Since the plugin is in its early stages, there are a couple additional configuration steps:

  1. Upload ad-code-manager to the /wp-content/plugins/ directory.
  2. Activate the plugin through the 'Plugins' menu in WordPress.
  3. Incorporate ad tags in your theme template with do_action( 'acm_tag', 'slot' ). Also you can use [acm-tag id="slot"] shortcode or ACM Widget.
  4. Implement filters to make the plugin work with your provider.
  5. Configure your ad codes in the WordPress admin (Tools -> Ad Code Manager).

Screenshots

  1. Adding an ad code with a site name, zone, and multiple conditionals. Adding an ad code with a site name, zone, and multiple conditionals.

  2. Edit existing ad codes inline through the admin interface. Edit existing ad codes inline through the admin interface.

  3. Access the Help menu in the upper right for configuration assistance. Access the Help menu in the upper right for configuration assistance.

  4. Example of ad tag in use in a theme header template. Example of ad tag in use in a theme header template.

Configure Ad Code Manager to manage the advertisements on your site

Ad Code Manager is a VIP-sponsored plugin designed to make it easier to manage the ad codes used to display advertisements on your site. There's a little bit of work you'll need to do up front, however, in order to integrate Ad Code Manager with your theme.

The high-level idea behind Ad Code Manager is that it gives non-developers an admin interface to manage your ad codes. It then permits users to (optionally) target specific ad codes using conditionals like is_home() and is_single(). Ad codes are associated with positions in the theme through the use of ad tags.

Currently, Ad Code Manager easily integrates with Google Doubleclick For Publishers Async and Google AdSense. Other ad providers are supported with additional configuration.

Google AdSense and DoubleClick For Publishers Async

Let's use AdSense as our first example. You'll want to incorporate some of the default ad tags into your theme by use of do_action(). Here's an example you might put in your header.php file:

do_action( 'acm_tag', '728x90_leaderboard' );

Once you've done so, you can select the "Google AdSense" provider in the admin. Ad codes can be registered against ad tags (positions) by choosing the ad tag from the drop down, entering the tag ID and publisher ID, and hitting "Add New Ad Code".

And like that, your 728x90 leaderboard will appear on your site.

The Google AdSense configuration comes with many of Google's suggested sizes. Additional ad tags can be registered by the way of filtering:

add_filter( 'acm_ad_tag_ids', 'acmx_filter_ad_tag_ids' );
function acmx_filter_ad_tag_ids( $ids ) {
	$ids[] = array(
		'enable_ui_mapping' => true,
		'tag'               => '100x100_smallsquare',
		'url_vars'          => array(
			'tag'    => '100x100_smallsquare',
			'height' => '100',
			'width'  => '100',
		),
	);

	return $ids;
}

Keep in mind that you'll still need to incorporate a do_action( 'acm_tag', '100x100_smallsquare' ); in your theme in order to display the ad tag.

If you choose Google DFP Async as your provider, you'll likely need to register additional ad tags, as we only package two default ad tags.

Custom Ad Provider Implementations

As mentioned previously, other ad code providers are supported with additional configuration. Here's an example of the different filters you would use to configure the older version of Google Doubleclick For Publishers:

/**
 * Define the default URL to be used when rendering ad codes
 */
add_filter( 'acm_default_url', 'acmx_filter_default_url' ) ;
function acmx_filter_default_url( $url ) {
	if ( 0 === strlen( $url )  ) {
		return "http://ad.doubleclick.net/adj/%site_name%/%zone1%;s1=%zone1%;s2=;pid=%permalink%;fold=%fold%;kw=;test=%test%;ltv=ad;pos=%pos%;dcopt=%dcopt%;tile=%tile%;sz=%sz%;";
	}
}

/**
 * Whitelist the DFP URL to be used in ad tags. The whitelist
 * helps prevent execution of arbitrary scripts
 */
add_filter( 'acm_whitelisted_script_urls', 'acmx_filter_whitelisted_script_urls');
function acmx_filter_whitelisted_script_urls( $whitelisted_urls ) {
	$whitelisted_urls = array( 'ad.doubleclick.net' );
	return $whitelisted_urls;
}

/**
 * Define the different ad tags (locations) you'd like to use in your theme
 */
add_filter( 'acm_ad_tag_ids', 'acmx_ad_tags_ids' );
function acmx_ad_tags_ids( $ad_tag_ids ) {
	return array(
		array(
			'tag'      => '728x90-atf',
			'url_vars' => array(
				'sz'     => '728x90',
				'fold'   => 'atf',
				'width'  => '728',
				'height' => '90',
			),
		),
		array(
			'tag'      => '728x90-btf',
			'url_vars' => array(
				'sz'     => '728x90',
				'fold'   => 'btf',
				'width'  => '728',
				'height' => '90',
			),
		),
		array(
			'tag'      => '300x250-atf',
			'url_vars' => array(
				'sz'     => '300x250',
				'fold'   => 'atf',
				'width'  => '300',
				'height' => '250',
			),
		),
		array(
			'tag'      => '300x250-btf',
			'url_vars' => array(
				'sz'     => '300x250',
				'fold'   => 'btf',
				'width'  => '300',
				'height' => '250',
			),
		),
		array(
			'tag'      => '160x600-atf',
			'url_vars' => array(
				'sz'     => '160x600',
				'fold'   => 'atf',
				'width'  => '160',
				'height' => '600',
			),
		),
		array(
			'tag'      => '1x1',
			'url_vars' => array(
				'sz'   => '1x1',
				'fold' => 'int',
				'pos'  => 'top',
			),
		)
	);
}

add_filter( 'acm_output_html','acmx_filter_output_html', 5, 2 );
/**
 * Register the full script output to use with each ad tag.
 */
function acmx_filter_output_html( $output_html, $tag_id ) {
	$output_html = '<!-- DFP %pos% %sz% ad tag --> 
	<script>
if ( typeof ord=='undefined' ) { ord=Math.random()*10000000000000000; }
if ( typeof( dfp_tile ) == 'undefined' ) { dfp_tile=%tile% };
document.write('<script src="%url%ord=' + ord + '?"></script>');
</script><noscript><a href="%url%ord=%random%?" target="_blank"><img src="%url%ord=%random%?" width="%width%" height="%height%" border="0" alt="></a></noscript>
<!-- //DFP %pos% %sz% tag -->';
	return $output_html;
}

add_filter('acm_output_tokens', 'acmx_filter_output_tokens', 5, 3 );
/**
 * Fine tune our output tokens.
 *
 * This is the real example of how easily you can modify output
 * depending on your ad network specs.
 */
function acmx_filter_output_tokens( $output_tokens, $tag_id, $code_to_display ) {
	global $dfp_tile;
	global $dfp_ord;
	global $dfp_pos;
	global $dfp_dcopt;
	global $wp_query;
	
	// We can't really rely on get_permalink() so use $_SERVER['REQUEST_URI] as bulletproof solution for generating unique pids
	$link = strlen( $_SERVER['REQUEST_URI'] ) > 1 ? sanitize_key( $_SERVER['REQUEST_URI'] ) : home_url();
	$output_tokens['%permalink%'] = str_replace( array( '/',':', '.' ), '', $link ); 
	$output_tokens['%random%']    = $dfp_ord;
	$output_tokens['%tile%']      = ++$dfp_tile;
	if (  false === $dfp_pos[ $code_to_display['url_vars']['sz'] ] ) {
		$output_tokens['%pos%']                        = 'top';
		$dfp_pos[ $code_to_display['url_vars']['sz'] ] = true;
	} else {
		$output_tokens['%pos%'] = 'bottom';
	}
	if ( ! $dfp_dcopt ) {
		$output_tokens['%dcopt%'] = 'ist';
		$dfp_dcopt                = true;
	} else {
		$output_tokens['%dcopt%'] = '';
	}
	
	$output_tokens['%test%'] = isset( $_GET['test'] ) && $_GET['test'] == 'on' ? 'on' : '';
	
	return $output_tokens;
}

Configuration Filters

There are some filters which allow you to easily customize the output of the plugin. You should place these filters in your theme's functions.php file or in another appropriate place.

Check out this gist to see all of the filters in action.

acm_ad_tag_ids

Ad tag ids are used as a parameter when adding tags to your theme (e.g. do_action( 'acm_tag', 'my_top_leaderboard' )). The url_vars defined as part of each tag here will also be used to replace tokens in your default URL.

Arguments:

  • array $tag_ids array of default tag ids

Example usage: Add a new ad tag called 'my_top_leaderboard'

add_filter( 'acm_ad_tag_ids', 'my_acm_ad_tag_ids' );
function my_acm_ad_tag_ids( $tag_ids ) {
	$tag_ids[] = array(
		'tag'      => 'my_top_leaderboard', // tag_id
		'url_vars' => array(
			'sz'              => '728x90', // %sz% token
			'fold'            => 'atf', // %fold% token
			'my_custom_token' => 'something' // %my_custom_token% will be replaced with 'something'
		),
	);
	return $tag_ids;
}

acm_default_url

Set the default tokenized URL used when displaying your ad tags. This filter is required.

Arguments:

  • string $url The tokenized url of Ad Code

Example usage: Set your default ad code URL

add_filter( 'acm_default_url', 'my_acm_default_url' );
function my_acm_default_url( $url ) {
	if ( 0 === strlen( $url ) ) {
		return "http://ad.doubleclick.net/adj/%site_name%/%zone1%;s1=%zone1%;s2=;pid=%permalink%;fold=%fold%;kw=;test=%test%;ltv=ad;pos=%pos%;dcopt=%dcopt%;tile=%tile%;sz=%sz%;";
	}
}

acm_output_html

The HTML outputted by the do_action( 'acm_tag', 'ad_tag_id' ); call in your theme. Support multiple ad formats ( e.g. JavaScript ad tags, or simple HTML tags ) by adjusting the HTML rendered for a given ad tag.

The %url% token used in this HTML will be filled in with the URL defined with acm_default_url.

Arguments:

  • string $output_html The original output HTML
  • string $tag_id Ad tag currently being accessed

Example usage:

add_filter( 'acm_output_html', 'my_acm_output_html', 10, 2 );
function my_acm_output_html( $output_html, $tag_id ) {
	switch ( $tag_id ) {
		case 'my_leaderboard':
			$output_html = '<a href="%url%"><img src="%image_url%" /></a>';
			break;
		case 'rich_media_leaderboard':
			$output_html = '<script> // omitted </script>';
			break;
		default:
			break;
	}
	return $output_html;
}

acm_register_provider_slug

Ad Code Manager has a built-in list of providers that it gathers by scanning the 'providers' directory used by the plugin. Additional providers can be added by placing the appropriate files in that directory, or by using the acm_register_provider_slug filter to register those that may be included as part of your theme or another plugin.

When using this plugin, you are defining the provider slug as part of the existing object as well as an array of classes associated with that provider slug.

Arguments:

  • object $providers An object containing the current registered providers.

Example usage:

add_filter( 'acm_register_provider_slug', 'my_acm_register_provider_slug' );
function my_acm_register_provider_slug( $providers ) {
	$providers->new_provider_slug = array(
		'provider' => 'My_New_Ad_Company_ACM_Provider',
		'table'    => 'My_New_Ad_Company_ACM_WP_List_Table'
	);

	return $providers;
}

acm_whitelisted_script_urls

A security filter to define a safelist for which ad code script URLs can be added in the admin.

Arguments:

  • array $whitelisted_urls Existing whitelisted ad code URLs

Example usage: Allow Doubleclick for Publishers ad codes to be used

add_filter( 'acm_whitelisted_script_urls', 'my_acm_safelisted_script_urls' );
function my_acm_safelisted_script_urls( $safelisted_urls ) {
	$safelisted_urls = array( 'ad.doubleclick.net' );
	return $safelisted_urls;
}

acm_output_tokens

Output tokens can be registered depending on the needs of your setup. Tokens defined here will be replaced in the ad tag's tokenized URL in addition to the tokens already registered with your tag id.

Arguments:

  • array $output_tokens Any existing output tokens
  • string $tag_id Unique tag id
  • array $code_to_display Ad Code that matched conditionals

Example usage: Test to determine whether you're in test or production by passing ?test=on query argument

add_filter( 'acm_output_tokens', 'my_acm_output_tokens', 10, 3 );
function my_acm_output_tokens( $output_tokens, $tag_id, $code_to_display ) {
	$output_tokens['%test%'] = isset( $_GET['test'] ) && $_GET['test'] == 'on' ? 'on' : '';
	return $output_tokens;
}

acm_whitelisted_conditionals

Extend the list of usable conditional functions with your own awesome ones. We safelist these so users can't execute random PHP functions.

Arguments:

  • array $conditionals Default conditionals

Example usage: Register a few custom conditional callbacks

add_filter( 'acm_whitelisted_conditionals', 'my_acm_safelisted_conditionals' );
function my_acm_safelisted_conditionals( $conditionals ) {
	$conditionals[] = 'my_is_post_type';
	$conditionals[] = 'is_post_type_archive';
	$conditionals[] = 'my_page_is_child_of';

	return $conditionals;
}

acm_conditional_args

For certain conditionals (has_tag(), has_category()), you might need to pass additional arguments.

Arguments:

  • array $cond_args Existing conditional arguments
  • string $cond_func Conditional function (is_category(), is_page(), etc.)

Example usage: has_category() and has_tag() use has_term(), which requires the object ID to function properly.

add_filter( 'acm_conditional_args', 'my_acm_conditional_args', 10, 2 );
function my_acm_conditional_args( $cond_args, $cond_func ) {
	global $wp_query;

	// The `has_category()` and `has_tag()` functions call the `has_term()` function.
	// We should pass queried object id for it to produce correct result.
	if ( in_array( $cond_func, array( 'has_category', 'has_tag' ) ) && $wp_query->is_single == true ) {
		$cond_args[] = $wp_query->queried_object->ID;
	}

	// my_page_is_child_of is our custom WP conditional tag and we have to pass queried object ID to it.
	if ( in_array( $cond_func, array( 'my_page_is_child_of' ) ) && $wp_query->is_page ) {
		$cond_args[] = $cond_args[] = $wp_query->queried_object->ID;
	}

	return $cond_args;
}

acm_display_ad_codes_without_conditionals

Change the behavior of Ad Code Manager so that ad codes without conditionals display on the front end. The default behavior is that each ad code requires a conditional to be included in the presentation logic.

Arguments:

  • bool $behavior Whether or not to display the ad codes that don't have conditionals

Example usage:

add_filter( 'acm_display_ad_codes_without_conditionals', '__return_true' );

acm_provider_slug

By default, we use our bundled doubleclick_for_publishers config (check it in /providers/doubleclick-for-publishers.php). If you want to add your own flavor of DFP or even implement configuration for some another ad network, you'd have to apply a filter to correct the slug.

Example usage:

add_filter(
	'acm_provider_slug',
	function() {
		return 'my-ad-network-slug';
	}
);

acm_logical_operator

By default, logical operator is set to "OR", that is, ad code will be displayed if at least one conditional returns true. You can change it to "AND", so that ad code will be displayed only if ALL of the conditionals match.

Example usage:

add_filter(
	'acm_logical_operator',
	function() {
		return 'AND';
	}
);

acm_manage_ads_cap

By default, user has to have manage_options cap. This filter comes in handy, if you want to relax the requirements.

Example usage:

add_filter(
	'acm_manage_ads_cap',
	function( $cap ) {
		return 'edit_others_posts';
	}
);

acm_allowed_get_posts_args

This filter is only for edge cases. Most likely you won't have to touch it. Allows to include additional query args for Ad_Code_Manager->get_ad_codes() method.

Example usage:

add_filter(
	'acm_allowed_get_posts_args',
	function( $args_array ) {
		return array( 'offset', 'exclude' );
	}
);

acm_ad_code_count

By default, the total number of ad codes to get is 50, which is reasonable for any small to mid-sized site. However, in some certain cases you would want to increase the limit. This will affect Ad_Code_Manager->get_ad_codes() numberposts query argument.

Example usage:

add_filter(
	'acm_ad_code_count',
	function( $total ) {
		return 100;
	}
);

acm_list_table_columns

This filter can alter table columns that are displayed in ACM UI.

Example usage:

add_filter( 'acm_list_table_columns', 'my_acm_list_table_columns' );
function my_acm_list_table_columns( $columns ) {
	$columns = array(
		'id'           => __( 'ID', 'ad-code-manager' ),
		'name'         => __( 'Name', 'ad-code-manager' ),
		'priority'     => __( 'Priority', 'ad-code-manager' ),
		'conditionals' => __( 'Conditionals', 'ad-code-manager' ),
	);

	return $columns;
}

acm_ad_code_args

This filter comes in pair with previous one, it should return array of ad network specific parameters. E.g. in acm_list_table_columns example we have 'id', 'name', 'priority', 'conditionals'. All of them except 'name' are generic for Ad Code Manager. Hence, acm_provider_columns should return only "name".

"editable" and "required" indicate whether this field should be editable and required.

Example usage:

add_filter( 'acm_ad_code_args', 'my_acm_ad_code_args' );
function my_acm_ad_code_args( $args ) {
	$args = array(
		array(
			'key'      => 'name',
			'label'    => __( 'Name', 'ad-code-manager' ),
			'editable' => true,
			'required' => true,
		),
	);

	return $args;
}

More Repositories

1

mongoose

MongoDB object modeling designed to work in an asynchronous environment.
JavaScript
26,622
star
2

wp-calypso

The JavaScript and API powered WordPress.com
JavaScript
12,359
star
3

_s

Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for.
CSS
10,849
star
4

node-canvas

Node canvas is a Cairo backed Canvas implementation for NodeJS.
JavaScript
9,820
star
5

kue

Kue is a priority job queue backed by redis, built for node.js.
JavaScript
9,434
star
6

simplenote-electron

Simplenote for Web, Windows, and Linux
TypeScript
4,517
star
7

juice

Juice inlines CSS stylesheets into your HTML source.
JavaScript
3,037
star
8

pocket-casts-android

Pocket Casts Android 🎧
Kotlin
2,440
star
9

cli-table

Pretty unicode tables for the CLI with Node.JS
JavaScript
2,243
star
10

expect.js

Minimalistic BDD-style assertions for Node.JS and the browser.
JavaScript
2,098
star
11

simplenote-ios

Simplenote for iOS
Swift
1,976
star
12

monk

The wise MongoDB API
JavaScript
1,845
star
13

knox

S3 Lib
JavaScript
1,738
star
14

simplenote-android

Simplenote for Android
Java
1,688
star
15

jetpack

Security, performance, marketing, and design tools — Jetpack is made by WordPress experts to make WP sites safer and faster, and help you grow your traffic.
PHP
1,550
star
16

pocket-casts-ios

Pocket Casts iOS app 🎧
Swift
1,464
star
17

simplenote-macos

Simplenote for macOS
Swift
1,420
star
18

antiscroll

OS X Lion style cross-browser native scrolling on the web that gets out of the way.
JavaScript
1,079
star
19

wp-desktop

WordPress.com for Desktop
981
star
20

WP-Job-Manager

Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
PHP
874
star
21

browser-repl

Launch a repl on your command line to any browser in the cloud.
JavaScript
728
star
22

themes

Free WordPress themes made by Automattic for WordPress.org and WordPress.com.
CSS
693
star
23

legalmattic

Democratizing WordPress.com legalese since 2014!
672
star
24

wpcom.js

WordPress.com JavaScript API client designed for Node.js and browsers
JavaScript
658
star
25

Picard

A prototype theme that uses React and WP-API
CSS
631
star
26

fb-instant-articles

Archived (see Readme). Enable Facebook Instant Articles on your WordPress site.
PHP
628
star
27

sensei

Sensei LMS - Online Courses, Quizzes, & Learning
PHP
514
star
28

developer

In your WordPress, developing locally
PHP
470
star
29

wordpress-activitypub

ActivityPub for WordPress
PHP
442
star
30

theme-components

A collection of patterns for creating a custom starter WordPress theme.
PHP
404
star
31

wp-super-cache

WP Super Cache: A fast caching engine for WordPress
PHP
399
star
32

Edit-Flow

WordPress plugin to accelerate your editorial workflow
PHP
341
star
33

o2

The o2 plugin for WordPress — blogging at the speed of thought
JavaScript
332
star
34

newspack-plugin

An advanced open-source publishing and revenue-generating platform for news organizations.
PHP
310
star
35

liveblog

Liveblogging done right. Using WordPress.
PHP
304
star
36

batcache

A memcached HTML page cache for WordPress.
PHP
278
star
37

Co-Authors-Plus

Multiple bylines and Guest Authors for WordPress
PHP
275
star
38

newspack-theme

A theme for Newspack.
PHP
265
star
39

vip-quickstart

Retired
PHP
265
star
40

Iris

A(n awesome) Color Picker
JavaScript
257
star
41

babble

Multilingual WordPress done right.
PHP
244
star
42

syntaxhighlighter

WordPress plugin that makes it easy to post syntax-highlighted code snippets.
CSS
237
star
43

VIP-Coding-Standards

PHP_CodeSniffer ruleset to enforce WordPress VIP coding standards.
PHP
210
star
44

underscores.me

PHP
209
star
45

newspack-blocks

Gutenberg blocks for the Newspack project.
PHP
193
star
46

isolated-block-editor

Repackages Gutenberg's editor playground as a full-featured multi-instance editor that does not require WordPress.
CSS
192
star
47

custom-metadata

A WordPress plugin that provides an easy way to add custom fields to your object types (post, pages, custom post types, users)
PHP
191
star
48

camptix

Moved to https://github.com/WordPress/wordcamp.org/
PHP
182
star
49

browserbuild

JavaScript
170
star
50

woocommerce-payments

Accept payments via credit card. Manage transactions within WordPress.
PHP
162
star
51

vip-go-mu-plugins

The development repo for mu-plugins used on the WordPress VIP Platform.
PHP
158
star
52

Documattic

WordPress presentations and resources shared by WordPress.com VIP
JavaScript
156
star
53

google-docs-add-on

Publish to WordPress from Google Docs
JavaScript
152
star
54

mydb

JavaScript
150
star
55

vip-scanner

Deprecated: Scan all sorts of themes and files and things! Use PHPCS and the VIP coding standards instead
PHP
140
star
56

wp-memcached

Memcached Object Cache for WordPress.
PHP
139
star
57

Genericons

A public mirror of changes to the Genericon release.
CSS
136
star
58

regenerate-thumbnails

WordPress plugin for regenerating thumbnails of uploaded images. Over 1 million active users and counting.
PHP
131
star
59

media-explorer

With Media Explorer, you can now search for tweets and videos on Twitter and YouTube directly from the Add Media screen in WordPress.
PHP
124
star
60

Rewrite-Rules-Inspector

WordPress plugin to inspect your rewrite rules.
PHP
123
star
61

PhpStorm-Resources

PhpStorm is making inroads at Automattic. Here you'll find various helpful files we've made.
123
star
62

wordbless

WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment
PHP
122
star
63

vip-go-mu-plugins-built

The generated repo for mu-plugins used on the VIP Go platform.
PHP
120
star
64

social-logos

A repository of all the social logos we use on WordPress.com
JavaScript
119
star
65

Cron-Control

A fresh take on running WordPress's cron system, allowing parallel processing
PHP
116
star
66

block-experiments

A monorepo of Block Experiments
JavaScript
114
star
67

genericons-neue

Genericons Neue are generic looking icons, suitable for a blog or simple website
HTML
114
star
68

nginx-http-concat

WordPress plugin to perform CSS and JavaScript concatenation of individual script files into one resource request.
PHP
114
star
69

php-thrift-sql

A PHP library for connecting to Hive or Impala over Thrift
PHP
113
star
70

wp-e2e-tests

Automated end-to-end tests for WordPress.com
JavaScript
112
star
71

gridicons

The WordPress.com icon set
PHP
108
star
72

woocommerce-services

WooCommerce Services is a feature plugin that integrates hosted services into WooCommerce (3.0+), and currently includes automated tax rates and the ability to purchase and print USPS shipping labels.
JavaScript
104
star
73

es-backbone

ElasticSearch Backbone library for quickly building Faceted Search front ends.
JavaScript
103
star
74

syndication

Syndicate your WordPress content.
PHP
102
star
75

theme-tools

Tools for making better themes, better.
JavaScript
99
star
76

mShots

Website Thumbnail/Snapshot Service
JavaScript
94
star
77

prefork

PHP class for pre-loading heavy PHP apps before serving requests
PHP
94
star
78

phpcs-neutron-standard

A set of phpcs sniffs for PHP >7 development
PHP
93
star
79

newspack-newsletters

Author email newsletters in WordPress
PHP
89
star
80

musictheme

A theme for bands and musicians that uses an experimental Gutenberg layout.
CSS
89
star
81

gutenberg-themes-sketch

A set of Sketch files to help you design block-driven WordPress themes.
88
star
82

zoninator

Curation made easy! Create "zones" then add and order your content straight from the WordPress Dashboard.
PHP
85
star
83

cloudup-cli

cloudup command-line executable
JavaScript
83
star
84

go-search-replace

🚀 Search & replace URLs in WordPress SQL files.
Go
81
star
85

lazy-load

Lazy load images on your WordPress site to improve page load times and server bandwidth.
JavaScript
77
star
86

gutenberg-ramp

Control conditions under which Gutenberg loads - either from your theme code or from a UI
PHP
75
star
87

measure-builds-gradle-plugin

Gradle Plugin for reporting build time metrics.
Kotlin
74
star
88

auto-update

Objective-C
73
star
89

wpes-lib

WordPress-Elasticsearch Lib
PHP
73
star
90

vip-go-skeleton

The base repository structure for all VIP Go sites
PHP
72
star
91

msm-sitemap

Comprehensive sitemaps for your WordPress VIP site. Joint collaboration between Metro.co.uk, WordPress VIP, Alley Interactive, Maker Media, 10up, and others.
PHP
70
star
92

jurassic.ninja

A frontend to launching ephemeral WordPress instances that auto-destroy after some time
PHP
69
star
93

gutenberg-block-styles

An example of a simple plugin that adds a block style to Gutenberg.
PHP
68
star
94

atd-chrome

After the Deadline extension for Chrome
JavaScript
66
star
95

wp-api-console

WordPress (.com and .org) API Console written in React/Redux
JavaScript
66
star
96

eventbrite-api

The Eventbrite API plugin brings the power of Eventbrite to WordPress, for both users and developers.
PHP
65
star
97

mongo-query

mongo query API component
JavaScript
65
star
98

site-logo

Add a logo to your WordPress site. Set it once, and all themes that support it will display it automatically.
PHP
65
star
99

vip-go-nextjs-skeleton

A Next.js boilerplate for decoupled WordPress on VIP.
TypeScript
65
star
100

newspack-popups

AMP-compatible popup notifications.
PHP
61
star