• Stars
    star
    628
  • Rank 71,541 (Top 2 %)
  • Language
    PHP
  • License
    GNU General Publi...
  • Created over 8 years ago
  • Updated 2 months ago

Reviews

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

Repository Details

Share content between your websites.

Distributor icon

Distributor

Distributor is a WordPress plugin that makes it easy to distribute and reuse content across your websites β€” whether in a single multisite or across the web.

Support Level Tests Linting Code scanning Release Version WordPress tested up to version License

You can learn more about Distributor's features at DistributorPlugin.com and documentation at the Distributor documentation site.

Note: The latest stable version of the plugin is the stable branch. Download the stable branch if you are intending to use the plugin in a Production environment.

Table of Contents

Features

Distributor supports safe, SEO-friendly content reuse and sharing via "pushing" and "pulling".

While logged in and editing or viewing any single post (or custom post type) that can be distributed, a Distributor admin bar item will appear, that will facilitate sharing ("pushing") that content to any connection.

Push the content you’re editing or viewing to any of your other sites from the admin bar

In the admin dashboard, a top level Distributor menu item links to the "pull" screen. Here, editors can share ("pull") content from any connection into the current site.

Pull content from another site from the Distributor admin menu

Content this is distributed (via Push or Pull) is connected to the original. Reposted content receives updates from the original, canonical source automatically.

Distributor intuitively presents the origin and status of any reused content

There are two connection types: internal and external.

  • Internal connections are other sites inside of the same multisite network. Any user logged into the network can distribute any content in the network to any other sites in the network where that user has permission to publish posts (assuming the site supports the same post type).
  • External connections are external websites, connected by the JSON REST API using the Authorization Setup Wizard for External Connections leveraging Application Passwords. External connections can be added in the WordPress admin dashboard under Distributor > External Connections. Administrators can decide which user roles are allowed to distribute content to and from that connection (Editors and Administrators by default). All users with those roles will inherit the permissions of the user account used to establish the remote connection.

Extendability

Distributor is built with the same extensible approach as WordPress itself, with fully documented hooks and filters to customize its default behavior and create custom distribution workflows. You can even create connections to other platforms.

Requirements

  • PHP 7.4+
  • WordPress 5.7+
  • External connections require HTTP Basic Authentication or WordPress.com OAuth2 (must be on WordPress VIP) be set up on the remote website. For Basic Auth, we recommend using Application Passwords built in to WordPress.
  • For external connections, Distributor needs to be installed on BOTH sides of the connection.
  • Version 2 of Distributor requires version two on BOTH sides of all connections.

Installation

For Production use, we recommend registering and downloading the plugin from DistributorPlugin.com – it's 100% free. You will be emailed a direct link to download the latest, production-ready build. Alternatively, you can download the latest release from GitHub.

You can upload and install the archived (zip) plugin via the WordPress dashboard (Plugins > Add New -> Upload Plugin) or manually inside of the wp-content/plugins directory, and activate on the Plugins dashboard.

Registration

To help inform our roadmap, keep adopters apprised of major updates and changes that could impact their websites, and solicit opportunities for beta testing and feedback, we’re asking for a little bit of information in exchange for a free key that unlocks update notifications and 1-click upgrades inside the WordPress dashboard. Your information is kept confidential. You can register here and input your key in Distributor settings in the dashboard (network dashboard for multisite users). Note that you need to input the email address you used to register Distributor (included in the email with your registration key) as that is linked to the registration key.

Set up External Connections

  1. Ensure that the current version of Distributor is active on BOTH sites being connected. We'll refer to these as mainsite.com and remotesite.com.
  2. On mainsite.com, navigate to Distributor > External Connections and click Add New.
  3. Enter a label for the connection (e.g., remotesite).
  4. Enter the URL (e.g. https://remotesite.com) for your remote site below the External Site URL and press the Authorize Connection button.
  5. You will be prompted to enter the user name and password of an administrative role of the remotesite.com if you are not already logged into remotesite.com and then redirected to the Authorize Application screen.
  6. At the Authorize Application screen, enter the name of the main site and press the 'Yes, I approve of this connection' button
  7. Review the roles selected in Roles Allowed to Push are the ones you want to support, update if necessary, then press the Update Connection button.

How to Distribute Content

There are two methods for distributing content between multiple WordPress sites, Push and Pull. Pushing allows you to share content from your site to one or more connected sites while Pulling allows you to bring content into your site from one of your connected sites. In either method, once content has been distributed it will stay in sync with any changes made to the origin post (when Pushing the origin is the site being Pushed from, when Pulling the origin is the site being Pulled from).

Pushing Content

The Distributor menu in the WP Admin Bar will appear after a piece of content has been published. Hovering over that menu item will expose the Push menu that displays the list of connected sites on the left, the list of sites that have been selected for push distribution on the right, and a button to Distribute the content to those selected sites.

Push menu exposed when viewing published content on the front-end

The same Push menu and set of Distributor options are also available after publishing a piece of content within the WordPress Block Editor.

Push menu exposed when viewing published content in the Block Editor

After you click the Distribute button, Distributor will push the content to the selected connected sites, showing a View link when those pieces of content have been distributed, and noting Post successfully distributed. once the content has completed distributing to selected sites.

Push menu showing details after content distribution

When viewing that piece of content in the Block Editor, there will be a Distributor notice in the Status & visibility section noting how many sites the content has been distributed to.

Block Editor sidebar showing Distributor count of sites that content has been distributed to (via Push and Pull)

The same Push menu is available in the WP Admin Bar if you are using the Classic Editor. The Distributor notice is also available in the Publish metabox noting how many sites the content has been distributed to.

Classic Editor showing the Push menu and metabox showing Distributor count of sites that content has been distributed to (via Push and Pull)

Pulling Content

Navigating to the Distributor > Pull Content screen in the WP Admin will present you with a dropdown to select any of the sites you are connected to and will display all available pieces of content that can be Pulled into the current site. You can select Posts, Pages, and other Custom Post Types to filter on this screen; you can use the Bulk Edit menu to Pull or Skip more than one piece of content at a time; and you can use individual row actions on each piece of content pull, view, or skip each piece of content.

Pull Content screen showing row actions and a single post selected for Pulling

After you have Bulk Pulled several pieces of content or used the row actions to Pull a single piece of content, the Pull Content screen will show a confirmation message that the Pull action was successful and redirect you to the Pulled list view to see all the items that have been pulled into the current site. The same process will happen if you opt to Skip specific piece(s) of content.

Pull Content screen showing confirmation on content being pulled

You can navigate to the Posts > All Posts table list view to see all content that has been pushed or pulled to the current site via the Distributor column denoted with the Distributor icon (Distributor icon). Rows that include the Distributor icon will link off that icon to the origin site and post where that content was either pushed or pulled from.

All Posts screen showing Distributor links for pushed and pulled content

Support Level

Active: 10up is actively working on this, and we expect to continue work for the foreseeable future including keeping tested up to the most recent version of WordPress. Bug reports, feature requests, questions, and pull requests are welcome.

Known Caveats/Issues

Remote Request Timeouts - With external connections, HTTP requests are sent back and forth - creating posts, transfering images, syncing post updates, etc. In certain situations, mostly commonly when distributing posts with a large number of images (or very large file sizes), using poorly configured or saturated servers / hosts, or using plugins that add significant weight to post creation, Distributor requests can fail. Although we do some error handling, there are certain cases in which post distribution can fail silently. If distribution requests are taking a long time to load and/or failing, consider adjusting the timeout; you can filter the timeout for pushing external posts using the dt_push_post_timeout filter. More advanced handling of large content requests, and improved error handling is on the road map for a future update.

Post Meta Associations - A distributed post includes all of the post meta from the original version. Sometimes arbitrary post meta references an ID for another piece of content on the original site. Distributor does not "bring along" the referenced content or update references for arbitrary post meta (it will take care of updating references in the case of core WordPress features, such as the featured image ID). This issue is very common when using field management plugins like Advanced Custom Fields (ACF). This can be addressed on a case by case basis by extending the plugin; for external connections, you can manually handle post meta associations using the dt_push_post hook. For internal connections, use the dt_push_post hook. Note that while named the same, these hooks accept different parameters.

Deleting Distributed Posts - When a post that has been distributed is deleted, the distributed copies will become unlinked ("forked") from the original and thus become editable. Similarly, when a distributed post is unpublished, distributed copies will not be unpublished. More sophisticated "removal" workflow is on the road map for a future update.

Gutenberg Block Mismatch - When distributing a Gutenberg post to another site that supports Gutenberg, if a block in the post does not exist on the receiving site, the block will be converted to a "Classic" HTML block.

Parent Posts - Distributor does not "bring along" parent (or child posts). If your post (or custom post type) has a parent or a child, it will distribute it as if it's an orphan.

Custom Post Type Support - Internal Connections (multisite) support multiple post types. In order for distribution to work with External Connections that have custom post type content, that post type needs to be registered with the argument show_in_rest => true on the external site.

Unable to Push to New Custom Post Types - If new Custom Post Types are created after establishing an External Connection, you will only be able to Pull those from an External Connection. To ensure you are able to Push new Custom Post Types to an External Connection, you will need to update the External Connection by editing it and then clicking the Update connection button.

Backwards Compatibility - While we strive to be mindful of backwards compatibility much the same way WordPress itself is, we do not currently guarantee continued interoperability between different versions of Distributor. We assume the current userbase for this plugin has a high degree of control over any site that has been set up as an external connection and urge you to keep Distributor up to date.

Distributing Post content - By default, post content is rendered before being copied. This means that shortcodes are expanded before being distributed and remote posts will not have the shortcode, but rather the expanded HTML content.

Distributing Authors - By default, distributed posts reference the original site as the "author" with a link to it. This can be altered by extending Distributor with custom code to make it sync authors.

Distributing Post Date - By default, the "post date" on distributed posts is the date its published on the remote site, not the date published on the origin site. This can be overridden by extending Distributor with custom code to make it preserve the post date.

Distributing Canonical URL - By default, canonical URL of distributed post will point to original content, which corresponds to SEO best practices. This can be overridden by extending Distributor with custom code and removing Distributor's default front end canonical URL filtering (look for 'get_canonical_url' and 'wpseo_canonical').

Drafts as Preferred Status - By default, drafts are the preferred status and can't be changed at the source site.

Conflicts with Security plugins - Oftentimes the communication Distributor attempts to make across sites using the REST API will be flagged by various security plugins and surreptitiously blocked. If you run into an issue like this, please reach out to the support for your security plugin and ask about getting Distributor unblocked (here is an example for doing so with Wordfence).

Developers

See Distributor Developer Documentation.

Changelog

A complete listing of all notable changes to Distributor are documented in CHANGELOG.md.

Contributing

Please read CODE_OF_CONDUCT.md for details on our code of conduct and CONTRIBUTING.md for details on the process for submitting pull requests to us.

Like what you see?

More Repositories

1

ElasticPress

A fast and flexible search and query engine for WordPress.
PHP
1,242
star
2

Engineering-Best-Practices

10up Engineering Best Practices
SCSS
757
star
3

wp-local-docker

****** WP Local Docker V2 is now available - https://github.com/10up/wp-local-docker-v2
Shell
748
star
4

wp_mock

WordPress API Mocking Framework
PHP
674
star
5

classifai

Supercharge WordPress Content Workflows and Engagement with Artificial Intelligence.
PHP
567
star
6

action-wordpress-plugin-deploy

Deploy your plugin to the WordPress.org repository using GitHub Actions
Shell
521
star
7

wp-local-docker-v2

ARCHIVED: A simple Docker based development environment for WordPress.
JavaScript
484
star
8

actions-wordpress

GitHub Actions for WordPress!
Shell
419
star
9

MU-Migration

This WP-CLI plugin makes the process of moving sites from single WordPress sites to a Multisite instance (or vice-versa) much easier. It exports everything into a zip package which can be used to automatically import it within the desired Multisite installation.
PHP
324
star
10

safe-redirect-manager

A simple HTTP redirection plugin for WordPress.
PHP
311
star
11

wpcli-vulnerability-scanner

WP-CLI command for checking installed plugins and themes for vulnerabilities reported on wpvulndb.com
PHP
274
star
12

wp-component-library

A library of barebones front-end components built with WordPress and accessibility in mind.
HTML
270
star
13

safe-svg

Enable SVG uploads and sanitize them to stop XML/SVG vulnerabilities in your WordPress website.
PHP
263
star
14

grunt-wp-theme

WordPress Theme Project Templates
JavaScript
252
star
15

SketchPress

Sketch template for quickly creating awesome WordPress admin interface mockups and designs.
251
star
16

block-components

A collection of components built to be used in the block editor
TypeScript
251
star
17

WP-Minions

ARCHIVED: Job Queue for WordPress
PHP
231
star
18

restricted-site-access

Limit access to visitors who are logged in or allowed by IP addresses. Includes many options for handling blocked visitors.
PHP
228
star
19

wpsnapshots

(DEPRECATED) A project sharing tool for WordPress.
PHP
216
star
20

simple-local-avatars

Adds an avatar upload field to user profiles. Generates requested sizes on demand just like Gravatar!
PHP
213
star
21

wp-scaffold

10up WordPress project scaffold.
PHP
192
star
22

generator-wp-make

A Yeoman generator for making WordPress things
JavaScript
184
star
23

theme-scaffold

DEPRECATED. Use https://github.com/10up/wp-scaffold
PHP
184
star
24

grunt-wp-plugin

DEPRECATED: Please use https://github.com/10up/generator-wp-make instead.
JavaScript
183
star
25

simple-podcasting

A simple podcasting solution for WordPress.
PHP
179
star
26

nodeifywp

Powerful framework plugin for turning your WordPress theme into an isomorphic JavaScript application.
PHP
171
star
27

headstartwp

Build a headless website fast with WordPress, the world’s most popular CMS, and Next.js, the most popular React framework. A free and open source solution by the experts at 10up.
TypeScript
160
star
28

wp-hammer

ARCHIVED: Please see https://github.com/10up/wp-scrubber as replacement.
PHP
150
star
29

wpacceptance

ARCHIVED: A team scalable solution for reliable WordPress acceptance testing.
PHP
148
star
30

convert-to-blocks

Convert to Blocks is a WordPress plugin that transforms classic editor content to blocks on the fly.
PHP
147
star
31

simple-page-ordering

Order your pages and other hierarchical post types with simple drag and drop right from the standard page list.
PHP
146
star
32

plugin-scaffold

DEPRECATED. Use https://github.com/10up/wp-scaffold
PHP
133
star
33

10up-experience

The 10up Experience plugin configures WordPress to better protect and inform clients, aligned to 10up’s best practices.
PHP
129
star
34

Async-Transients

ARCHIVED: Transients that serve stale data while regenerating the new transients in the background.
PHP
124
star
35

action-wordpress-plugin-asset-update

Update your plugin readme and assets in the WordPress.org repository outside of new releases
Shell
117
star
36

autoshare-for-twitter

Automatically shares the post title or custom message and a link to the post to X/Twitter.
PHP
117
star
37

10up-toolkit

Official 10up asset building toolkit.
JavaScript
108
star
38

wp-codeception

Integrates Codeception framework into WordPress and allows run tests using WP CLI command.
PHP
103
star
39

twentysixteenreact

Twenty Sixteen theme as an isomorphic React.js application using NodeifyWP.
CSS
93
star
40

slotfill-and-filter-demos

This repo can be used as reference or can be installed as a plugin in any WordPress install to make code changes as needed. Each SlotFill or filter is explained with examples. This is meant to be a working document and will change as Gutenberg does.
JavaScript
93
star
41

gutenberg-best-practices

Welcome to the 10up Gutenberg Best Practices!
JavaScript
88
star
42

eight-day-week

Optimize print publication workflows by using WordPress as your print CMS.
PHP
86
star
43

wp-content-connect

WordPress library that enables direct relationships for posts to posts and posts to users.
JavaScript
83
star
44

nginx_configs

ARCHIVED: Nginx Configuration Template for WordPress Sites
C++
77
star
45

project-scaffold

DEPRECATED. Use https://github.com/10up/wp-scaffold
JavaScript
76
star
46

insert-special-characters

A Special Character inserter for the WordPress block editor (Gutenberg).
JavaScript
71
star
47

maps-block-apple

An Apple Maps block for the WordPress block editor (Gutenberg).
JavaScript
70
star
48

secured-advanced-custom-fields

ARCHIVED: Secured version of the Advanced Custom Fields plugin
PHP
63
star
49

windows-azure-storage

Use the Microsoft Azure Storage service to host your website's media files.
PHP
61
star
50

wp-newrelic

New Relic APM reports for WordPress.
PHP
59
star
51

component-library

A library of barebones front-end components built with WordPress and accessibility in mind.
JavaScript
58
star
52

ads-txt

Ads.txt Manager for WordPress: Manage your ads.txt and app-ads.txt files in the WordPress dashboard
PHP
56
star
53

Post-Customizer

A WordPress plugin to enhance the post editor preview
JavaScript
51
star
54

phpcs-composer

Official 10up PHPCS rules.
PHP
48
star
55

Open-Source-Best-Practices

Start reading: https://10up.github.io/Open-Source-Best-Practices/
SCSS
46
star
56

WordPress-Server-Configs

Configurations for the common Linux software stack 10up uses for WordPress
Nginx
44
star
57

10up-code-review

Custom PHP_CodeSniffer rules to help flag common issues during code review
PHP
43
star
58

publisher-media-kit

Pre-configured Media Kit Page using Gutenberg Block Patterns.
PHP
42
star
59

block-catalog

Easily keep track of which Gutenberg Blocks are used across your WordPress site.
PHP
40
star
60

curator

Select specific posts from across multiple post types to combine together and control the ordering.
PHP
38
star
61

insecure-content-warning

Prevent editors from adding insecure content in the editor.
JavaScript
37
star
62

retro-winamp-block

A Winamp-styled audio block for all your retro music player needs.
JavaScript
35
star
63

wordpress-ci-container

WordPress continuous integration Docker container with composer, NPM, and other common build tools for PHP projects
Shell
35
star
64

vagrant-ghost

Vagrant Hosts Updater Plugin
Ruby
31
star
65

elasticpress-react

Use ElasticPress with React.
JavaScript
30
star
66

10up-sitemaps

Simple sitemaps plugin that performs at scale.
PHP
29
star
67

debug-bar-elasticpress

Extends the Debug Bar plugin for usage with ElasticPress
PHP
27
star
68

simple-new-post-emails

Allow site members to check a box and get new posts via email. Includes a widget.
PHP
27
star
69

elasticpress-autosuggest

DEPRECATED - Functionality merged into core ElasticPress plugin
JavaScript
26
star
70

nodeifywp-environment

Dockerized environment for NodeifyWP applications.
26
star
71

action-wordpress-plugin-build-zip

Build a zip archive of your WordPress.org plugin using GitHub Actions
Shell
25
star
72

Docker-Images

Docker image repository
Shell
24
star
73

Ad-Refresh-Control

Enable Active View refresh for Google Ad Manager ads without needing to modify any code.
PHP
24
star
74

cypress-wp-utils

Utilities library for WordPress E2E testing in the Cypress environment
TypeScript
23
star
75

secure-media

ARCHIVED: Store private media securely in WordPress.
PHP
23
star
76

elasticpress-woocommerce-deprecated

DEPRECATED - Bundled in ElasticPress 2.1
PHP
22
star
77

brightcove-video-connect

A plugin to integrate your Brightcove video library or libraries with WordPress
PHP
22
star
78

Brute-Force-Login-Prevention

Assists in preventing common brute force login attempts by modifying the default login URL for WordPress.
PHP
20
star
79

snapshots

(BETA) A project sharing tool for WordPress. Previously known as WP Snapshots.
PHP
20
star
80

wp-safe-edit

ARCHIVED: Safely edit published posts behind the scenes without affecting the live site.
PHP
18
star
81

elasticpress-proxy

A custom PHP Proxy to handle Instant Results requests.
PHP
18
star
82

ElasticPressLabs

A developer-focused interface to enabling experimental ElasticPress plugin features.
PHP
18
star
83

wp-local-docker-docs

Documentation for WP Local Docker
SCSS
18
star
84

cypress-wp-setup

NPM package to set up boilerplate for Cypress testing.
JavaScript
17
star
85

gutenberg-lessons

10up Gutenberg Training WordPress Starter Files
PHP
17
star
86

image-generator

Generates missed thumbnails for images on the fly.
PHP
17
star
87

SwiftStream

Image lazy-loader for WordPress.
PHP
16
star
88

grunt-for-wordpress

Install Grunt, Git, and 10up WordPress Grunt scripts.
Shell
16
star
89

eslint-config

A shareable ESLint config.
JavaScript
16
star
90

elasticpress-stream

ARCHIVED: Use ElasticPress to power Stream with Elasticsearch.
PHP
16
star
91

wp-scrubber

BETA: This plugin provides a command-line interface for scrubbing sensitive user and comment data from a WordPress installation.
PHP
15
star
92

action-repo-automator

GitHub Action to automate common repo operations like validate PR description, changelog, and credits.
JavaScript
15
star
93

Gitlab-Registry-Cleaner

Bash script using the GitLab API to delete images from a GitLab container registry. Supports regex and deleting images older than a specific age.
Shell
15
star
94

frontity-packages

10up's collection of frontity packages.
JavaScript
15
star
95

CSS_Customizer

Drop in class for implementing a custom CSS editor either as a standalone settings page or a meta box.
PHP
14
star
96

ElasticPress-Admin-Deprecated

THIS FEATURE HAS BEEN MOVED TO THE CORE ELASTICPRESS PLUGIN.
PHP
13
star
97

composer-scan

ARCHIVED: Scans your composer.lock file to find vulnerable WordPress plugins and themes using the https://wpvulndb.com API
Python
12
star
98

simple-google-news-sitemap

A simple Google News sitemap is generated on-the-fly for articles that were published in the last two days. Output is saved in cache or as a transient for fast reading and displaying on the front end.
PHP
12
star
99

Publish-to-Twitter

Publish to Twitter based on WordPress taxonomies.
JavaScript
11
star
100

animation-best-practices

Welcome to the 10up Animation Best Practices!
HTML
11
star