Title: TootPress
Author: unmus
Published: <strong>March 31, 2023</strong>
Last modified: July 19, 2025

---

Search plugins

![](https://ps.w.org/tootpress/assets/banner-772x250.png?rev=2892017)

![](https://ps.w.org/tootpress/assets/icon-128x128.png?rev=2892008)

# TootPress

 By [unmus](https://profiles.wordpress.org/unmus/)

[Download](https://downloads.wordpress.org/plugin/tootpress.0.5.zip)

 * [Details](https://pcd.wordpress.org/plugins/tootpress/#description)
 * [Reviews](https://pcd.wordpress.org/plugins/tootpress/#reviews)
 * [Development](https://pcd.wordpress.org/plugins/tootpress/#developers)

 [Support](https://wordpress.org/support/plugin/tootpress/)

## Description

TootPress copies your toots from Mastodon to WordPress continuously. The toots can
be displayed chronologically in the blog, making your timeline accessible to other
people outside of Mastodon. In addition, you regain ownership of your own data back.

#### Features

 * Copy your toots back
 * Copy your tooted images back
 * Display your toots on the blog
 * Retrieve your complete timeline
 * Languague: English, German (only FrontEnd)

#### Live Demo

[Here!](https://www.unmus.de/troets/)

### Setup Manual

 1.  Install the Plugin in WordPress
 2.  Create an Application on your Mastodon Instance to get API Access (under Settings/
     Development)
 3.  Restrict the Authorization of the created Application to Read (all data)
 4.  Maintain Mastodon Instance and Access Token in the TootPress Settings
 5.  Retrieve your Account ID (in WordPress under Tools/Toots)
 6.  Maintain the Account ID in the TootPress Settings
 7.  Create a new WordPress Page and add the Page to your Menu
 8.  Maintain the Page ID in the TootPress Settings (you find the Page ID in URL of
     the Browser when editing the Page in WordPress)
 9.  Run Mastodon API Request once (in WordPress under Tools/Toots)
 10. Activate Steady Fetch
 11. That’s it!

### Instructions for Use

 * You find TootPress in WordPress in the area of Settings and Tools
 * Steady Fetch activates the automatic and regular load of new toots
 * First API Request will copy your last 40 toots
 * New toots will be loaded every 15 minutes (customizable)
 * You can load your complete timeline into WordPress with the eponymous function
 * Loading your complete timeline can take several hours depending of the amount
   of toots
 * 480 toots are loaded per hour as maximum
 * You can run a Mastodon API Request everytime at your own with the eponymous function
 * There is no prescribed order for the execution of Steady Fetch, Complete Timeline
   or manual requests
 * If problems occur, TootPress provides a Healthy Check

### Further Information

#### Supported Toot Objects

Following toot objects are supported.

 * Text
 * Images
 * Galleries
 * URLs
 * Hashtags
 * Mentions

#### Not supported Toot Objects

Following toot objects are not supported.

 * Audio
 * Video
 * Poll
 * Teaser
 * Quotes

#### Excluded Toot Types

Following toot types are excluded from the data transfer.

 * Boosts
 * Replys
 * Private Toots

#### Architecture

Data storage and process logic is separated from the WordPress Framework. The toots
are not saved in the table wp_posts. And TootPress is not registering a custom post
type for the toots as well.

#### CSS classes

TootPress comes with basic CSS Styles. For best fit it is required to add additional
styles in your theme. All TootPress UI elements can be addressed with individual
CSS selectors. Please use the browser development tools to find the right classes.

#### Data & Files

TootPress creates 2 folders within the WordPress Uploads Directory.

 * tootpress-mastodonapidata = Archive of the received Mastodon API data
 * tootpress-images = Toot Image Folder

#### wpCrons

 * Steady Fetch (every 15 minutes, customizable)
 * Load Complete Timeline (every 5 minutes)

#### TootPress API

**Action: tootpress_toots_update**
 It will be fired after toot update to execute
custom post-processing. You can use the following code.

    ```
    function tootpress_toots_update_postprocessing() {

        // Add your code to be executed here

    }
    add_action('tootpress_toots_update', 'tootpress_toots_update_postprocessing');
    ```

**Filter: tootpress_preamble_filter**
 It outputs html content before the toot loop.
You can use the following code.

    ```
    function tootpress_preamble_add( $preamble ) {

        // Add your filter code here
        // Example: $preamble='<p>Hello World.</p>';

        return $preamble;

    }
    add_filter( 'tootpress_preamble_filter', 'tootpress_preamble_add', 10, 1 );
    ```

**Filter: tootpress_closing_filter**
 It outputs html content after the last toot
loop. You can use the following code.

    ```
    function tootpress_closing_add( $content ) {

        // Add your filter code here
        // Example: $content='<p>Hello World.</p>';

        return $content;

    }
    add_filter( 'tootpress_closing_filter', 'tootpress_closing_add', 10, 1 );
    ```

**Filter: tootpress_menu_forward_label**
 This filter overwrites the forward label
in the bottom navigation. You can use the following code.

    ```
    function tootpress_menu_forward_label_change( $label ) {

        // Add your filter code here
        // Example: $label='Newer Posts';

        return $label;

    }
    add_filter( 'tootpress_menu_forward_label', 'tootpress_menu_forward_label_change', 10, 1 );
    ```

**Filter: tootpress_menu_backward_label**
 This filter overwrites the backward label
in the bottom navigation. You can use the following code.

    ```
    function tootpress_menu_backward_label_change( $label ) {

        // Add your filter code here
        // Example: $label='Older Posts';

        return $label;

    }
    add_filter( 'tootpress_menu_backward_label', 'tootpress_menu_backward_label_change', 10, 1 );
    ```

**Filter: tootpress_beforeloop_filter**
 This filter outputs content before the 
toot loop (on all tootpress pages). You can use the following code.

    ```
    function tootpress_beforeloop_filter_add( $content, $page_number ) {

        // Add your filter code here
        // Example: $content='<p>Page '.$page_number.'</p>';

        return $label;

    }
    add_filter( 'tootpress_beforeloop_filter', 'tootpress_beforeloop_filter_add', 10, 2 );
    ```

**Filter: tootpress_afterloop_filter**
 This filter outputs content after the toot
loop (on all tootpress pages). You can use the following code.

    ```
    function tootpress_afterloop_add( $content, $current_page_number, $last_page_number ) {

        // Add your filter code here
        // Example: $content='<p>Page '.$current_page_number.' of '.$last_page_number.'</p>';

        return $content;

    }
    add_filter( 'tootpress_afterloop_filter', 'tootpress_afterloop_add', 10, 3 );
    ```

**Filter: tootpress_mastodon_logo_filter**
 This filter overwrites the Mastodon 
Logo with Custom Logo. You can use the following code.

    ```
    function tootpress_mastodon_logo_change ( $img ) {

        // Standard Value
        // <img class="toot-symbol" src="FILE-URL" alt="Toot Symbol" width="35" height="37"/>

        // Add your filter code here
        // Example: $img='<img class="toot-symbol" src="FILE-URL" alt="Custom Toot Symbol" width="32" height="32"/>';

        return $img;

    }
    add_filter( 'tootpress_mastodon_logo_filter', 'tootpress_mastodon_logo_change', 10, 1 );
    ```

**Filter: tootpress_between_filter**
 This filter adds custom HTML between the toots.
You can use the following code.

    ```
    function tootpress_create_element_between ( $content ) {

        // Add your filter code here
        // $content='<hr/>';

        return $content;

    }
    add_filter( 'tootpress_between_filter', 'tootpress_create_element_between', 10, 1 );
    ```

**Filter: tootpress_toot_content_filter**
 This filter can be used to manipulate
the toot content. You can use the following code.

    ```
    function tootpress_manipulate_content ( $content ) {

        // Add your filter code here
        // $content=str_replace('href=','target="_blank" href=',$content); 

        return $content;

    }
    add_filter( 'tootpress_toot_content_filter', 'tootpress_manipulate_content', 10, 1 );
    ```

**Filter: tootpress_date_filter**
 This filter overwrites the date output with custom
format. You can use the following code.

    ```
    function tootpress_date_custom_format ( $date, $year, $month, $day, $hour, $minute, $second ) {

        // $date = 2023-05-30 22:40:28
        // $year = 2023
        // $month = 05
        // $day = 30
        // $hour = 22
        // $minute = 40
        // $second = 28

        // Add your filter code here
        // $date=$day.'.'.$month.'.'.$year.' '.$hour.':'.$minute.':'.$second;

        return $date;

    }
    add_filter( 'tootpress_date_filter', 'tootpress_date_custom_format', 10, 7 );
    ```

**Filter: tootpress_image_filter**
 This filter can be used to manipulate image 
tags. You can use the following code.

    ```
    function tootpress_image_manipulate ($img_tag,$filename,$description,$width,$height,$image_directory_path,$amount_of_images,$image_number) {

        // Amount of Images
        // ----------------
        // 1 = Single Image
        // >1 = Gallery + Size of Gallery

        // Image Number
        // ------------
        // This number indicates position within the gallery

        // Add your filter code here
        // $img_tag=str_replace('alt=','class="tootpress-image" alt=',$img_tag);

        return $img_tag;

    }
    add_filter( 'tootpress_image_filter', 'tootpress_image_manipulate', 1, 8 );
    ```

#### Related Links

 * [Source Code @ GitHub](https://github.com/circuscode/tootpress)
 * [Official Plugin Page](https://www.unmus.de/tootpress/) (German)

## Screenshots

 * [[
 * Toots in the Blog
 * [[
 * Plugin Options
 * [[
 * Plugin Features

## FAQ

### Why are boosts, replys and private toots not supported?

Boosts are not your toots. Replys are communication, but not micro-posts. Private
Toots should stay private.

### How does TootPress handle the canonical URL?

TootPress does not modify the existing canonical url handling in WordPress. If you
want to create a unique canonical url for each TootPress subpage, you must control
that with a SEO plugin. This becomes relevant when your toots must be distributed
over several pages and the plugin starts the paging process.

### What have to be considered with the usage of caching plugins?

The length of the cron period in combination with the configuration of caching determines
how early a toot will be displayed within the blog. If a toot should be displayed
as early as possible, the caching must be deactivated for the page containing the
toots. Another possibility is removing the affected page from the cache, if new 
toots have been loaded. For this, a WordPress Action is fired by the plugin, which
then must be processed by your caching plugin.

### How are backlinks to Mastodon displayed?

Backlinks to Mastodon can be activated in the plugin settings. In this case, the
Mastodon Logo, which is shown for each toot, will be extended with an link to the
original toot on the corresponding Mastodon instance. Recommendation is not activating
the backlinks as this could cause an negative impact on SEO rating.

### Does TootPress support WordPress Multisite?

No. TootPress does not support the WordPress Multisite Feature. The plugin is working
on the master-site, but is not working on all other child sites within the wordpress
network.

### Are the toots included in the WordPress Search?

Unfortunately not.

### Is there any possiblity to modify the outputs on the user interface?

Almost every content element, which is created by TootPress in the FrontEnd, can
be modified. For example, you can replace the Mastodon Logo with another image. 
Enabeling this, the plugin is providing a bunch of filters. Please read the documentation
of the filter above.

### Does TootPress recognize, if a published Toot was edited on Mastodon?

The plugin does not sync the Toots between Mastodon and WordPress. TootPress is 
copying the toots just once after they are published on Mastodon. So if a published
toot is edited on Mastodon later, TootPress does not recognized this change anymore,
if the toot was already copied to WordPress. Reflecting the edit in WordPress there
is only the possibility to make the same edit again directly in the WordPress database.
The toots are stored in the table tootpress_toots.

### Can toots be loaded from several Mastodon instances?

No. The plugin does currently not support several Mastodon instances. The architecture
is designed to load toots from one single instance. Independent from this, if your
toot history is spread over several instances and the timelines does not overlap,
you can try to load the timelines one after another. This is not officially supported
or tested, but based on user feedback this seems to work surprisingly.

## Reviews

![](https://secure.gravatar.com/avatar/e2c0acf9cc7ab172b09aba1907337b0d06fc0c1236a19a23214de248792f19eb?
s=60&d=retro&r=g)

### 󠀁[It works!](https://wordpress.org/support/topic/it-works-2506/)󠁿

 [trickstar13](https://profiles.wordpress.org/trickstar13/) July 6, 2024 1 reply

This is an excellent plugin that functions exactly as described. As a suggestion
for improvement, I would appreciate the ability to save toots as WordPress posts.

![](https://secure.gravatar.com/avatar/10609d3104df492683acb5a3f1d3e42b44343e7ac43c89933adc6d2002b9bfe6?
s=60&d=retro&r=g)

### 󠀁[Ambiguous Labels](https://wordpress.org/support/topic/ambiguous-labels/)󠁿

 [Todd Lyons](https://profiles.wordpress.org/trlyons/) March 10, 2024 2 replies

This was a pain to configure due to brief documentation and the ambiguous labeling
within the app. For example, under WordPress > Settings > TootPress > Plugin, “Account
ID” should specify “Mastodon Account ID” (a long number) and “Page ID” is “WordPress
Page ID” — the numerical ID of the WordPress page you must create for this app to
work. It would also be clearer if “Account ID” was moved up under the “Mastodon 
API” section of the configuration and if the “Plugin” section was renamed to “WordPress”.
I would share helpful links for finding your Mastodon Account ID and WordPress Page
ID except that links aren’t allowed in reviews. Happy searching.

![](https://secure.gravatar.com/avatar/0c5ea4244820a48f2587fd7bd263236f310a45862cf65f1dea118b45478e646e?
s=60&d=retro&r=g)

### 󠀁[Works wonderfully – Thank you.](https://wordpress.org/support/topic/works-wonderfully-thank-you/)󠁿

 [munyard](https://profiles.wordpress.org/munyard/) November 7, 2023 1 reply

TootPress works wonderfully – Thank you. It installed seamlessly, the setup instructions
are methodical and easy to follow and worked perfectly when tested, I configured
to run every 360 minutes, because I don’t toot very often.

![](https://secure.gravatar.com/avatar/7b3383aeeb93dc2e6a805a367007428e11356f17ff108d26bdcc1914e39485d0?
s=60&d=retro&r=g)

### 󠀁[It’s working! 🙂](https://wordpress.org/support/topic/its-working-85/)󠁿

 [Nicole6870](https://profiles.wordpress.org/nicole6870/) April 13, 2023

It’s working very well so far. Thank you for making this. 🙂

 [ Read all 4 reviews ](https://wordpress.org/support/plugin/tootpress/reviews/)

## Contributors & Developers

“TootPress” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ unmus ](https://profiles.wordpress.org/unmus/)

[Translate “TootPress” into your language.](https://translate.wordpress.org/projects/wp-plugins/tootpress)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/tootpress/), check 
out the [SVN repository](https://plugins.svn.wordpress.org/tootpress/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/tootpress/) by [RSS](https://plugins.trac.wordpress.org/log/tootpress/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.5 “Echo”

 * July 2025
 * Feature: Closing Filter
 * Feature: Move Forward Label Filter
 * Feature: Move Backward Label Filter
 * Feature: Before Loop Filter
 * Feature: After Loop Filter
 * Feature: Mastodon Logo Filter
 * Feature: Between Filter
 * Feature: Toot Content Filter
 * Feature: Date Filter
 * Feature: Image Filter
 * Changed: DOM Structure
 * Renamed: CSS Classes
 * Security: Better Output Escaping

#### 0.4 “Cassie Lang”

 * June 2024
 * Feature: Preamble Filter

#### 0.3 “Deadpool”

 * April 2024
 * Feature: Support of Gallery Toots
 * Feature: Amount of Toots will be shown in WordPress Dashboard
 * Feature: Option to activate Backlinks to Mastodon
 * Changed: Label of User Interface Section in Plugin Options
 * Bugfix: Plugin CSS will now really be activated
 * Bugfix: Rewrite Rules will be updated after changed settings
 * Bugfix: Internal Plugin Version will be set corretly
 * Bugfix: CSS Option will be set correctly with Restore of default Settings

#### 0.2.1

 * April 2023
 * Bugfix: Label for Option Nav Standard will displayed again

#### 0.2 “Kate Bishop”

 * April 2023
 * New: Available in WordPress Plugin Directory
 * Added: Escaping Echos
 * Changed: CSS Enqueuing
 * Changed: Retrive Image Files via HTTP API

#### 0.1 “Ms. Marvel”

 * March 2023
 * Initial Release

## Meta

 *  Version **0.5**
 *  Last updated **9 months ago**
 *  Active installations **30+**
 *  WordPress version ** 6.1 or higher **
 *  Tested up to **6.8.5**
 *  Language
 * [English (US)](https://wordpress.org/plugins/tootpress/)
 * Tags
 * [blog](https://pcd.wordpress.org/plugins/tags/blog/)[fediverse](https://pcd.wordpress.org/plugins/tags/fediverse/)
   [mastodon](https://pcd.wordpress.org/plugins/tags/mastodon/)[microblogging](https://pcd.wordpress.org/plugins/tags/microblogging/)
 *  [Advanced View](https://pcd.wordpress.org/plugins/tootpress/advanced/)

## Ratings

 4.5 out of 5 stars.

 *  [  3 5-star reviews     ](https://wordpress.org/support/plugin/tootpress/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/tootpress/reviews/?filter=4)
 *  [  1 3-star review     ](https://wordpress.org/support/plugin/tootpress/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/tootpress/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/tootpress/reviews/?filter=1)

[Add my review](https://wordpress.org/support/plugin/tootpress/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/tootpress/reviews/)

## Contributors

 *   [ unmus ](https://profiles.wordpress.org/unmus/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/tootpress/)