dispatch = 'feedwordpress_admin_page_posts'; $this->filename = __FILE__; $this->updatedPosts = new UpdatedPostsControl($this); $this->pagenames = array( 'default' => 'Posts', 'settings-update' => 'Syndicated posts', 'open-sheet' => 'Syndicated Posts & Links', ); } /* FeedWordPressPostsPage constructor */ function save_settings ($post) { // custom post settings $custom_settings = $this->custom_post_settings(); foreach ($post['notes'] as $mn) : if (isset($mn['key0'])) : $mn['key0'] = trim($mn['key0']); if (strlen($mn['key0']) > 0) : unset($custom_settings[$mn['key0']]); // out with the old endif; endif; if (isset($mn['key1'])) : $mn['key1'] = trim($mn['key1']); if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) : $custom_settings[$mn['key1']] = $mn['value']; // in with the new endif; endif; endforeach; $this->updatedPosts->accept_POST($post); if ($this->for_feed_settings()) : $alter = array (); $this->link->settings['postmeta'] = serialize($custom_settings); if (isset($post['resolve_relative'])) : $this->link->settings['resolve relative'] = $post['resolve_relative']; endif; if (isset($post['munge_permalink'])) : $this->link->settings['munge permalink'] = $post['munge_permalink']; endif; if (isset($post['munge_comments_feed_links'])) : $this->link->settings['munge comments feed links'] = $post['munge_comments_feed_links']; endif; // Post status, comment status, ping status foreach (array('post', 'comment', 'ping') as $what) : $sfield = "feed_{$what}_status"; if (isset($post[$sfield])) : if ($post[$sfield]=='site-default') : unset($this->link->settings["{$what} status"]); else : $this->link->settings["{$what} status"] = $post[$sfield]; endif; endif; endforeach; if (isset($post['syndicated_post_type'])) : if ($post['syndicated_post_type']=='default') : unset($this->link->settings['syndicated post type']); else : $this->link->settings['syndicated post type'] = $post['syndicated_post_type']; endif; endif; else : // update_option ... if (isset($post['feed_post_status'])) : update_option('feedwordpress_syndicated_post_status', $post['feed_post_status']); endif; update_option('feedwordpress_custom_settings', serialize($custom_settings)); update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']); update_option('feedwordpress_use_aggregator_source_data', $_REQUEST['use_aggregator_source_data']); update_option('feedwordpress_formatting_filters', $_REQUEST['formatting_filters']); if (isset($post['resolve_relative'])) : update_option('feedwordpress_resolve_relative', $post['resolve_relative']); endif; if (isset($post['munge_comments_feed_links'])) : update_option('feedwordpress_munge_comments_feed_links', $post['munge_comments_feed_links']); endif; if (isset($_REQUEST['feed_comment_status']) and ($_REQUEST['feed_comment_status'] == 'open')) : update_option('feedwordpress_syndicated_comment_status', 'open'); else : update_option('feedwordpress_syndicated_comment_status', 'closed'); endif; if (isset($_REQUEST['feed_ping_status']) and ($_REQUEST['feed_ping_status'] == 'open')) : update_option('feedwordpress_syndicated_ping_status', 'open'); else : update_option('feedwordpress_syndicated_ping_status', 'closed'); endif; if (isset($post['syndicated_post_type'])) : update_option('feedwordpress_syndicated_post_type', $post['syndicated_post_type']); endif; endif; parent::save_settings($post); } /** * Outputs "Publication" settings box. * * @since 2009.0713 * @param object $page of class FeedWordPressPostsPage tells us whether this is * a page for one feed's settings or for global defaults * @param array $box * * @uses FeedWordPressPostsPage::these_posts_phrase() * @uses FeedWordPress::syndicated_status() * @uses SyndicatedLink::syndicated_status() */ /*static*/ function publication_box ($page, $box = NULL) { $thesePosts = $page->these_posts_phrase(); $postSelector = array( 'publish' => "Publish %s immediately", 'pending' => "Hold %s for review; mark as Pending", 'draft' => "Save %s as drafts", 'private' => "Save %s as private posts", ); $labels = array(); foreach ($postSelector as $index => $value) : $postSelector[$index] = sprintf(__($value), $thesePosts); $labels[$index] = __(str_replace(' %s', '', strtolower(strtok($value, ';')))); endforeach; $params = array( 'input-name' => 'feed_post_status', 'setting-default' => NULL, 'global-setting-default' => 'publish', 'labels' => $labels, ); // Hey ho, let's go... ?> updatedPosts->display(); ?>
setting_radio_control( 'post status', 'syndicated_post_status', $postSelector, $params ); ?>
these_posts_phrase(); if ($page->for_feed_settings()) : $formatting_filters = null; $url = preg_replace('|/+$|', '', $page->link->homepage()); else : $formatting_filters = get_option('feedwordpress_formatting_filters', 'no'); $url = 'http://example.com'; endif; ?>
Formatting filters:

If you have trouble getting plugins to work that are supposed to insert elements after posts (like relevant links or a social networking Share This button), try changing this option to see if it fixes your problem.

Relative URIs:

If link or image in a syndicated post from refers to a partial URI like /about, where should the syndicated copy point to?

'Resolve the URI so it points to '.$url.'
/contact is rewritten as '.$url.'/contact', 'no' => 'Leave relative URIs unchanged, so they point to this site
/contact is left as /contact', ); $params = array( 'setting-default' => 'default', 'global-setting-default' => 'yes', 'labels' => array( 'yes' => __('resolve relative URIs'), 'no' => __('leave relative URIs unresolved'), ), 'default-input-value' => 'default', ); $this->setting_radio_control( 'resolve relative', 'resolve_relative', $options, $params ); ?>
array( 'yes' => __('The copy on the original website'), 'no' => __('The local copy on this website'), ), ); if (!$page->for_feed_settings()) : $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data'); endif; ?> for_feed_settings()) : ?>
Permalinks point to: 'default', 'global-setting-default' => 'yes', 'default-input-value' => 'default', ); $this->setting_radio_control( 'munge permalink', 'munge_permalink', $setting['munge_permalink'], $params ); ?>
Posts from aggregator feeds:

Some feeds (for example, those produced by FeedWordPress) aggregate content from several different sources, and include information about the original source of the post. This setting controls what FeedWordPress will give as the source of posts from such an aggregator feed.

array('label' => __('Comments'), 'accept' => 'Allow comments'), 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'), ); $onThesePosts = 'on '.$page->these_posts_phrase(); $mcflSettings = array( "yes" => __('Point to comment feeds from the original website (when provided by the syndicated feed)'), "no" => __('Point to local comment feeds on this website'), ); $mcflParams = array( 'setting-default' => 'default', 'global-setting-default' => 'yes', 'labels' => array( 'yes' => __('comment feeds from the original website'), 'no' => __('local comment feeds on this website') ), 'default-input-value' => 'default', ); $settings = array(); $params = array(); foreach ($whatsits as $what => $how) : $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed'); // Set up array for selector $settings[$what] = array( 'open' => sprintf(__("{$how['accept']} %s"), __($onThesePosts)), 'closed' => sprintf(__("Don't ".strtolower($how['accept'])." %s"), __($onThesePosts)), ); $params[$what] = array( 'input-name' => "feed_${what}_status", 'setting-default' => NULL, 'global-setting-default' => FeedWordPress::syndicated_status($what, /*default=*/ 'closed'), 'labels' => array( 'open' => strtolower(__($how['accept'])), 'closed' => strtolower(__("Don't ".$how['accept'])), ), ); endforeach; // Hey ho, let's go... ?> $how) : ?>
: setting_radio_control( "$what status", "syndicated_${what}_status", $settings[$what], $params[$what] ); ?>

When WordPress feeds and templates link to comments feeds for these_posts_phrase(); ?>, the URLs for the feeds should...

setting_radio_control( "munge comments feed links", "munge_comments_feed_links", $mcflSettings, $mcflParams ); ?>
for_feed_settings()) : $custom_settings = $page->link->setting("postmeta", NULL, array()); else : $custom_settings = get_option('feedwordpress_custom_settings'); endif; if ($custom_settings and !is_array($custom_settings)) : $custom_settings = unserialize($custom_settings); endif; if (!is_array($custom_settings)) : $custom_settings = array(); endif; return $custom_settings; } /* FeedWordPressPostsPage::custom_post_settings() */ /** * Output "Custom Post Settings" settings box * * @since 2009.0713 * @param object $page of class FeedWordPressPostsPage tells us whether this is * a page for one feed's settings or for global defaults * @param array $box */ /*static*/ function custom_post_settings_box ($page, $box = NULL) { $custom_settings = FeedWordPressPostsPage::custom_post_settings($page); ?>

Custom fields can be used to add extra metadata to a post that you can use in your theme.

'; foreach ($custom_settings as $key => $value) : ?>
Key Value Action

Enter a text value, or a path to a data element from the syndicated item.
For data elements, you can use an XPath-like syntax wrapped in $( ... ).
hello = the text value hello
$(author/email) = the contents of <author><email>...</email></author>
$(media:content/@url) = the contents of <media:content url="...">...</media:content>

add new setting...
'default' // Get all custom post types $post_types = get_post_types(array( '_builtin' => false, ), 'objects'); $ul = array(); $ul['post'] = __('Normal WordPress posts'); foreach ($post_types as $post_type) : $ul[$post_type->name] = __($post_type->labels->name); endforeach; $params = array( 'global-setting-default' => 'post', 'default-input-value' => 'default', ); // Hey, ho, let's go... ?>

Incoming syndicated posts should be stored in the posts database as...

setting_radio_control( 'syndicated post type', 'syndicated_post_type', $ul, $params ); ?>
boxes_by_methods = array( 'publication_box' => __('Syndicated Posts'), 'links_box' => __('Links'), 'formatting_box' => __('Formatting'), 'comments_and_pings_box' => __('Comments & Pings'), 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'), 'custom_post_types_box' => ('Custom Post Types (advanced database settings)'), ); parent::display(); } /* FeedWordPressPostsPage::display () */ } $postsPage = new FeedWordPressPostsPage; $postsPage->display();