PHPackages                             tfrommen/external-content - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tfrommen/external-content

ActiveWordpress-plugin[API Development](/categories/api)

tfrommen/external-content
=========================

This plugin registers a custom post type to handle external content like any other post. The post permalink is replaced by a custom post meta that holds an external URL.

v1.4.2(10y ago)181GPL-3.0PHPPHP &gt;=5.2.4

Since Aug 20Pushed 10y ago1 watchersCompare

[ Source](https://github.com/tfrommen/external-content)[ Packagist](https://packagist.org/packages/tfrommen/external-content)[ Docs](https://github.com/tfrommen/external-content)[ RSS](/packages/tfrommen-external-content/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (8)Dependencies (4)Versions (5)Used By (0)

External Content
================

[](#external-content)

[![Latest Stable Version](https://camo.githubusercontent.com/819ccca75ef80867ad3efbce6a88b255ecea0e3675e4105962c87a68093ea430/68747470733a2f2f706f7365722e707567782e6f72672f7466726f6d6d656e2f65787465726e616c2d636f6e74656e742f762f737461626c65)](https://packagist.org/packages/tfrommen/external-content)[![Project Status](https://camo.githubusercontent.com/5b5a2250da48f45495a817a4bcdabb5d101fff298acebe00a55a52815b7119ed/687474703a2f2f6f70656e736f757263652e626f782e636f6d2f6261646765732f6163746976652e737667)](http://opensource.box.com/badges)[![Build Status](https://camo.githubusercontent.com/c03e60d0203bbfd3df453f727454eac4682c689c743572a22e331cb910324885/68747470733a2f2f7472617669732d63692e6f72672f7466726f6d6d656e2f65787465726e616c2d636f6e74656e742e7376673f6272616e63683d6d6173746572)](http://travis-ci.org/tfrommen/external-content)[![License](https://camo.githubusercontent.com/fd1ff38a9a4266ba7e6b779bfc1811871043c4a905013c8c19a8c7c44ccdd024/68747470733a2f2f706f7365722e707567782e6f72672f7466726f6d6d656e2f65787465726e616c2d636f6e74656e742f6c6963656e7365)](https://packagist.org/packages/tfrommen/external-content)

Have you ever wanted to integrate external content such as a specific post of an external website into your WordPress website? But treat it like any other post? That is, have it appear as teaser or part of a specific (pseudo) archive?

This is exactly when *External Content* kicks in.

Installation
------------

[](#installation)

1. [Download ZIP](https://downloads.wordpress.org/plugin/external-content.zip).
2. Upload contents to the `/wp-content/plugins` directory on your web server.
3. Activate the plugin through the *Plugins* menu in WordPress.
4. Find the new *External Content* menu in your WordPress backend.

Screenshots
-----------

[](#screenshots)

[![Meta box](assets/screenshot-1.png)](assets/screenshot-1.png)
**Meta box** - Enter an external URL to have the post's permalink be replaced with it.

Usage
-----

[](#usage)

*External Content* registers a custom post type that, by default, supports title, content, excerpt and thumbnail. This can be customized, though. Managing your posts in your backend is no different from any other post type. Create a new post, give it a title, write some text, define an individual excerpt, and set a post thumbnail, if you wish. Then assign each post an individual external URL by means of the according meta box. This external URL will be used as the post's permalink.

### Filters

[](#filters)

In order to customize certain aspects of the plugin, it provides you with several filters. For each of these, a short description as well as a code example on how to alter the default behavior is given below. Just put the according code snippet in your theme's `functions.php` file or your *customization* plugin, or to some other appropriate place.

#### `external_content_args`

[](#external_content_args)

If you want to alter a specific post type argument but you can't find a fitting filter, there's `external_content_args`, which provides you with the complete args array.

```
/**
 * Filter the post type args.
 *
 * @param array $args Post type args.
 */
add_filter( 'external_content_args', function( $args ) {

	// Use hierarchical external content
	$args[ 'hierarchical' ] = TRUE;

	return $args;
} );
```

#### `external_content_description`

[](#external_content_description)

The post type description can be customized by using the `external_content_description` filter.

```
/**
 * Filter the post type description.
 *
 * @param string $description Post type description.
 */
add_filter( 'external_content_description', function() {

	// Provide a description
	return 'Simple post type for handling external content like any other post.';
} );
```

#### `external_content_labels`

[](#external_content_labels)

In case you don't like the labels, easily adapt them to your liking.

```
/**
 * Filter the post type labels.
 *
 * @param array $labels Post type labels.
 */
add_filter( 'external_content_labels', function( $labels ) {

	// A little more horror, please...
	$labels[ 'not_found' ] = 'ZOMG, no external content found!!1!!1!!oneone!!!1!eleven!1!';

	return $labels;
} );
```

#### `external_content_meta_key`

[](#external_content_meta_key)

If you want to alter the meta key for the external URL, feel free to do it via this filter.

```
/**
 * Filter the meta key.
 *
 * @param string $meta_key Meta key.
 */
add_filter( 'external_content_meta_key', function() {

	// Let's Shrekify the meta key
	return 'far_far_away';
} );
```

#### `external_content_post_type`

[](#external_content_post_type)

Yes, you can also alter the post type (slug).

```
/**
 * Filter the post type.
 *
 * @param string $post_type Post type.
 */
add_filter( 'external_content_post_type', function() {

	return 'exotic_stuff';
} );
```

#### `external_content_supports`

[](#external_content_supports)

This filter provides you with the the post type supports.

```
/**
 * Filter the post type supports.
 *
 * @param array $supports Post type supports.
 */
add_filter( 'external_content_supports', function( $supports ) {

	// If your theme uses the excerpt for teasers, just remove the editor to prevent confusion
	foreach ( $supports as $key => $value ) {
		if ( 'editor' === $value ) {
			unset( $supports[ $key ] );
		}
	}

	return $supports;
} );
```

#### `external_content_use_external_url`

[](#external_content_use_external_url)

The permalink of external content is, by default, replaced with the post's according external URL (i.e., post meta). To disable this behavior, just do the following:

```
/**
 * Filter the usage of the external URL as permalink.
 *
 * @param bool $use_external_url Use the external URL as permalink?
 */
add_filter( 'external_content_use_external_url', '__return_false' );
```

Contribution
------------

[](#contribution)

If you have a feature request, or if you have developed the feature already, please feel free to use the Issues and/or Pull Requests section.

Of course, you can also provide me with translations if you would like to use the plugin in another not yet included language.

Changelog
---------

[](#changelog)

[Changelog](CHANGELOG.md)

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~45 days

Total

4

Last Release

3834d ago

PHP version history (2 changes)v1.3.0PHP &gt;=5.3.0

v1.4.0PHP &gt;=5.2.4

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/6049306?v=4)[Thorsten Frommen](/maintainers/tfrommen)[@tfrommen](https://github.com/tfrommen)

---

Top Contributors

[![tfrommen](https://avatars.githubusercontent.com/u/6049306?v=4)](https://github.com/tfrommen "tfrommen (33 commits)")

---

Tags

wordpress-pluginurlcontentexternal

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/tfrommen-external-content/health.svg)

```
[![Health](https://phpackages.com/badges/tfrommen-external-content/health.svg)](https://phpackages.com/packages/tfrommen-external-content)
```

###  Alternatives

[helsingborg-stad/municipio

A bootstrap theme for creating municipality sites.

4028.5k10](/packages/helsingborg-stad-municipio)[mremi/url-shortener

A PHP5/PHP7/PHP8 library using API to shorten/expand URL

79725.6k6](/packages/mremi-url-shortener)[pods-framework/pods

Pods is a development framework for creating, extending, managing, and deploying customized content types in WordPress.

1.1k1.7k](/packages/pods-framework-pods)[mremi/url-shortener-bundle

Implementation of UrlShortener library for Symfony2/Symfony3

19135.1k](/packages/mremi-url-shortener-bundle)[pressbooks/pressbooks-book

This theme is named after Canadian media theorist Marshall McLuhan, who coined the phrase “the medium is the message.” It is designed for academic writing and is also suitable for fiction. Headings are set in Cormorant Garamond, and body type is set in Lora.

216.7k](/packages/pressbooks-pressbooks-book)[rukbat/bitly-bundle

bit.ly API bundle for symfony2

10135.4k](/packages/rukbat-bitly-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
