Mailster has a powerful tag engine built in where you dynamically populate your newsletter campaigns. Dynamic Custom Post Types allow work similar regular post types but are not stored in your database but generate content on demand.

Lets imagine you like to display the third latest post title of your site in a tag. You would do this with a dynamic tag like so:

But what if you like to display some special content which is not certainly a post? Some use cases could be

  • The most popular posts of your site.
  • The items in an cart on an e-commerce site.
  • The posts containing certain words.

As you can see the possibilities are endless so it’s up to you what you need.

This is only available in WordPress 4.6 and above!

Simple Example

To put this opportunities in a simple example we are going to create a dynamic custom post type where we create a dynamic tag for users.

The function you need to use to register the tag is similar to the official register_post_type method:

mailster_register_dynamic_post_type( $dcpt, $arguments, $callback );

The first parameter $dcpt accepts a string (the name of the dcpt). The second accepts the same argument as the register_post_type method and can be found here. You can also just pass the display name of your DCPT as not all options are needed.

mailster_register_dynamic_post_type( 'my_users', 'My Users', 'my_users_callback');
function my_users_callback( $offset, $campaign_id, $subscriber_id, $term_ids, $args, $random ) {
   $user_query = new WP_User_Query( array( 'number' => 1, 'offset' => absint( $offset ) ) );

   $users = $user_query->get_results();
   if ( empty( $users ) ) {
      // return null if no user has been found
      return null;

    // get first user of the array
    $user = $users[0];

    // return array or object
    return array(
       'post_title' => $user->display_name,
       'post_link' => get_author_posts_url( $user->ID ),

The third parameter of the mailster_register_dynamic_post_type function accepts a $callback which should return the actual post. Internally it will get converted to a WP_Post object if you return data as an object or an array.

If you return null Mailster will recognize the used tag as not existing and will not display any output.


Once you add the code you find a new item in the drop down if you choose dynamic insertion mode:

Since we only defined the post_title and the post_link the excerpt will be empty but you can of course define that as well. Find all tags you can use here.

You can also return custom properties as string:

    // return array or object
    return array(
       'zodiac_sign' => get_users_zodiac_sign( $user->ID ),  //custom method

With the above example you can use the {my_users_zodiac_sign:-1} to trigger the custom get_users_zodiac_sign method.

Use your dynamic custom post types in your campaigns.

This is just a basic example on what you can do with Dynamic Custom Post types in Mailster. Possibilities are of course almost endless.