Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm creating a theme using the CF Post Formats plugin. But I've run into some trouble I don't know how to solve. Here's what I want to be able to do:

  • Create a new standard-format post
  • Enter a url into the _format_link_url custom field
  • If the custom field is not empty, on save/update, change the post format to 'link'; else, remain 'standard'.

For whatever reason, I can't get set_post_format to work in this context (perhaps there's a conflicting update?). I would like things to work this way is because I want to be able to continue using Marsedit (which doesn't support post formats) to submit content to my blog. Since Marsedit does support custom fields, I figure I can use them to auto-update the post format. Any help would be appreciated.

Update: Okay, I've gotten this to mostly work. It works perfectly within the admin web interface. Via the web interface, I can create a link post with a url and it saves fine. I can try changing the post to a quote post, but on updating, it reverts to a link post (as intended, for now). I can delete the url from the custom field and on update the post becomes a standard post.

However, when creating or updating a link post from Marsedit, the custom field gets as it should but the post format is set as standard. Frustrating. The function I've created is below. What am I missing?

function gateway_set_post_format( $post_id ) {
    $the_post_format = get_post_format( $post_id );
    if ( $the_post_format == 'link' && empty($_POST['_format_link_url'])) {
        set_post_format( $post_id, '' );
    elseif ( !empty($_POST['_format_link_url']) ) {
            set_post_format( $post_id, 'link' );
add_action('save_post', 'gateway_set_post_format',11, 1);
share|improve this question
The new WP 3.6 will very likely include a built-in UI solution for Post Formats, so you might want to develop with it instead. –  gyo May 8 '13 at 8:08
add comment

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.