# friends/4.3.0/templates/admin/edit-feeds.php

Friends, version 4.3.0. 380 lines.

- Page: https://pluginprobe.com/plugins/friends/4.3.0/code/templates/admin/edit-feeds.php
- Raw: https://pluginprobe.com/plugins/friends/4.3.0/raw/templates/admin/edit-feeds.php
- Modified: 2026-07-13T15:57:44+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/friends/4.3.0/code/templates/admin/edit-feeds.php#L10-L20`.

```php
<?php
/**
 * This template contains the friend editor.
 *
 * @version 1.0
 * @package Friends
 */

$active_feeds = $args['friend']->get_active_feeds();
$_feeds = $args['friend']->get_feeds();


$has_last_log = false;
?><form method="post">
	<?php wp_nonce_field( 'edit-friend-feeds-' . $args['friend']->user_login ); ?>
	<table class="form-table">
		<tbody>
			<tr>
				<th><label for="url"><?php esc_html_e( 'Feeds', 'friends' ); ?></label></th>
				<td>
					<?php if ( empty( $active_feeds ) ) : ?>
						<?php esc_html_e( 'There are no active feeds.', 'friends' ); ?>
					<?php endif; ?>
					<ul class="feeds <?php echo empty( $active_feeds ) ? ' hidden' : ''; ?>">
						<?php
						$friends_feed = Friends\Friends::get_instance()->feed;
						foreach ( $_feeds as $term_id => $feed ) :
							if ( $feed->get_last_log() ) {
								$has_last_log = true;
								$last_log = $feed->get_last_log();
							}
							$parser_slug = $feed->get_parser();
							$feed_badge = $friends_feed->get_feed_badge( $feed );
							$feed_title = $feed->get_title();

							/**
							 * Filter the feed title displayed in the feed list.
							 *
							 * @param string    $feed_title The feed title.
							 * @param User_Feed $feed       The feed object.
							 * @param string    $parser     The parser slug.
							 */
							$feed_title = apply_filters( 'friends_feed_list_title', $feed_title, $feed, $parser_slug );
							?>
							<li class="<?php echo esc_attr( $feed->get_active() ? 'active' : 'inactive hidden' ); ?> feed-parser-<?php echo esc_attr( $parser_slug ); ?>"<?php echo $feed_badge ? ' style="--feed-color: ' . esc_attr( $feed_badge['color'] ) . ';"' : ''; ?>>
								<details>
									<summary>
										<?php if ( $feed_badge ) : ?>
											<span class="feed-badge" title="<?php echo esc_attr( $feed_badge['title'] ); ?>"><?php echo esc_html( $feed_badge['label'] ); ?></span>
										<?php endif; ?>
										<?php if ( $feed_title ) : ?>
											<span class="feed-title"><?php echo esc_html( $feed_title ); ?></span>
										<?php endif; ?>
										<a class="feed-url" href="<?php echo esc_url( $feed->get_url() ); ?>"><?php echo esc_html( $feed->get_url() ); ?></a>
									</summary>
									<div class="feed-content">
										<?php
										/**
										 * Action to add content at the top of the feed edit section.
										 *
										 * @param User_Feed $feed      The feed being edited.
										 * @param int       $term_id   The term ID of the feed.
										 * @param string    $parser    The parser slug.
										 */
										do_action( 'friends_edit_feed_content_top', $feed, $term_id, $parser_slug );
										?>
									<table class="form-table">
										<tbody>
											<tr>
												<th><?php esc_html_e( 'Active', 'friends' ); ?></th>
												<td>
													<input type="checkbox" name="feeds[<?php echo esc_attr( $term_id ); ?>][active]" value="1" aria-label="<?php esc_attr_e( 'Feed is active', 'friends' ); ?>"<?php checked( $feed->get_active() ); ?> />
													<?php if ( $feed->is_activitypub_feed() ) : ?>
														<p class="description"><?php esc_html_e( 'Make inactive and save changes to unfollow.', 'friends' ); ?></p>
													<?php endif; ?>
												</td>
											</tr>
											<?php if ( ! $feed->is_activitypub_feed() ) : ?>
											<tr>
												<th><?php esc_html_e( 'Feed URL', 'friends' ); ?></th>
												<td>
													<input type="text" name="feeds[<?php echo esc_attr( $term_id ); ?>][url]" value="<?php echo esc_attr( $feed->get_url() ); ?>" size="30" aria-label="<?php esc_attr_e( 'Feed URL', 'friends' ); ?>" class="url" />
												</td>
											</tr>
											<?php endif; ?>
											<tr>
												<th><?php esc_html_e( 'Parser', 'friends' ); ?></th>
												<td>
													<?php if ( $feed->is_activitypub_feed() ) : ?>
														<strong><?php esc_html_e( 'ActivityPub', 'friends' ); ?></strong>
														<input type="hidden" name="feeds[<?php echo esc_attr( $term_id ); ?>][parser]" value="activitypub" />
														<input type="hidden" name="feeds[<?php echo esc_attr( $term_id ); ?>][ap-actor-id]" value="<?php echo esc_attr( $feed->get_ap_actor_id() ); ?>" />
													<?php else : ?>
													<select name="feeds[<?php echo esc_attr( $term_id ); ?>][parser]" aria-label="<?php esc_attr_e( 'Parser', 'friends' ); ?>">
														<?php foreach ( $args['registered_parsers'] as $slug => $parser_name ) : ?>
														<option value="<?php echo esc_attr( $slug ); ?>"<?php selected( $slug, $feed->get_parser() ); ?>><?php echo esc_html( wp_strip_all_tags( $parser_name ) ); ?></option>
													<?php endforeach; ?>
														<?php if ( 'unsupported' === $feed->get_parser() ) : ?>
														<option value="<?php echo esc_attr( $feed->get_parser() ); ?>" selected="selected">
															<?php
															// translators: %s is the name of a deleted parser.
															echo esc_html( $feed->get_parser() );
															?>
														</option>
													<?php elseif ( ! isset( $args['registered_parsers'][ $feed->get_parser() ] ) ) : ?>
														<option value="<?php echo esc_attr( $feed->get_parser() ); ?>" selected="selected">
															<?php
															// translators: %s is the name of a deleted parser.
															echo esc_html( sprintf( __( '%s (deleted)', 'friends' ), $feed->get_parser() ) );
															?>
														</option>
													<?php endif; ?>
												</select>
												<a href="<?php echo esc_url( wp_nonce_url( add_query_arg( '_wp_http_referer', remove_query_arg( '_wp_http_referer' ), self_admin_url( 'admin.php?page=add-friend&parser=' . esc_url( $feed->get_parser() ) . '&feed=' . esc_attr( $term_id ) . '&preview=' . esc_url( $feed->get_url() ) ) ), 'preview-feed' ) ); ?>" class="preview-parser" target="_blank" rel="noopener noreferrer"><?php esc_attr_e( 'Preview', 'friends' ); ?></a>
													<?php endif; ?>
											</td>
										</tr>
										<tr>
											<th><?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */  esc_html_e( 'Post Format' ); ?></th>
											<td>
												<select name="feeds[<?php echo esc_attr( $term_id ); ?>][post-format]" aria-label="<?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ esc_attr_e( 'Post Format' ); ?>">
												<?php foreach ( $args['post_formats'] as $format => $_title ) : ?>
													<option value="<?php echo esc_attr( $format ); ?>"<?php selected( $format, $feed->get_post_format() ); ?>><?php echo esc_html( $_title ); ?></option>
												<?php endforeach; ?>
												</select>
											</td>
										</tr>
										<tr>
											<th><?php esc_html_e( 'Remarks', 'friends' ); ?></th>
											<td><input type="text" name="feeds[<?php echo esc_attr( $term_id ); ?>][title]" value="<?php echo esc_attr( $feed->get_title() ); ?>" size="20" aria-label="<?php esc_attr_e( 'Feed Name', 'friends' ); ?>" /></td>
										</tr>
											<tr>
												<th><?php esc_html_e( 'Actions', 'friends' ); ?></th>
												<td>
													<?php if ( $feed->is_activitypub_feed() ) : ?>
														<?php if ( $feed->get_active() ) : ?>
															<span class="dashicons dashicons-info-outline" title="<?php esc_attr_e( 'Make inactive and save changes so that you can remove this feed.', 'friends' ); ?>" aria-label="<?php esc_attr_e( 'Make inactive and save changes so that you can remove this feed.', 'friends' ); ?>"></span>
															<?php esc_html_e( 'Unfollow to remove', 'friends' ); ?>
														<?php else : ?>
															<a href="#" class="delete-feed activitypub-unfollow"><?php esc_html_e( 'Remove', 'friends' ); ?></a>
														<?php endif; ?>
													<?php else : ?>
														<a href="#" class="delete-feed"><?php esc_html_e( 'Delete', 'friends' ); ?></a>
													<?php endif; ?>
												</td>
											</tr>
										<?php do_action( 'friends_feed_list_item', $feed, $term_id ); ?>
									</tbody>
								</table>
									</div>
								</details>
							<?php if ( $feed->get_last_log() ) : ?>
								<p class="lastlog hidden notice">
									<?php
									echo esc_html( $feed->get_last_log() );
									echo ' ';
									echo wp_kses_post(
										sprintf(
										// translators: %s is a date.
											__( 'Will be fetched again at %s.', 'friends' ),
											esc_html( $feed->get_next_poll() )
										)
									);
									?>
								</p>
							<?php endif; ?>
						</li>
						<?php endforeach; ?>
						<li class="template hidden">
							<details open>
								<summary>
									<span class="feed-title"><?php esc_html_e( 'New Feed', 'friends' ); ?></span>
								</summary>
								<div class="feed-content">
									<table class="form-table">
										<tbody>
											<tr>
												<th><?php esc_html_e( 'Feed URL', 'friends' ); ?></th>
												<td><input type="text" name="feeds[new][url]" value="" size="30" aria-label="<?php esc_attr_e( 'Feed URL', 'friends' ); ?>" class="url" /></td>
											</tr>
											<tr>
												<th><?php esc_html_e( 'Parser', 'friends' ); ?></th>
												<td>
													<select name="feeds[new][parser]" aria-label="<?php esc_attr_e( 'Parser', 'friends' ); ?>">
													<?php foreach ( $args['registered_parsers'] as $slug => $parser_name ) : ?>
														<option value="<?php echo esc_attr( $slug ); ?>"><?php echo esc_html( wp_strip_all_tags( $parser_name ) ); ?></option>
													<?php endforeach; ?>
													</select>
													<a href="<?php echo esc_url( wp_nonce_url( add_query_arg( '_wp_http_referer', remove_query_arg( '_wp_http_referer' ), self_admin_url( 'admin.php?page=add-friend&parser=&preview=' ) ), 'preview-feed' ) ); ?>" class="preview-parser" target="_blank" rel="noopener noreferrer"><?php esc_attr_e( 'Preview', 'friends' ); ?></a>
												</td>
											</tr>
											<tr>
												<th><?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */  esc_html_e( 'Post Format' ); ?></th>
												<td>
													<select name="feeds[new][post-format]" aria-label="<?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ esc_attr_e( 'Post Format' ); ?>">
													<?php foreach ( $args['post_formats'] as $format => $_title ) : ?>
														<option value="<?php echo esc_attr( $format ); ?>"><?php echo esc_html( $_title ); ?></option>
													<?php endforeach; ?>
													</select>
												</td>
											</tr>
											<tr>
												<th><?php esc_html_e( 'Remarks', 'friends' ); ?></th>
												<td><input type="text" name="feeds[new][title]" value="" size="20" aria-label="<?php esc_attr_e( 'Feed Name', 'friends' ); ?>" /></td>
											</tr>
											<?php do_action( 'friends_feed_list_item', isset( $feed ) ? $feed : array(), 'new' ); ?>
										</tbody>
									</table>
								</div>
							</details>
						</li>
					</ul>

					<?php if ( count( $active_feeds ) !== count( $_feeds ) ) : ?>
					<a href="" class="show-inactive-feeds"><?php esc_html_e( 'Show inactive feeds', 'friends' ); ?></a> |
					<?php endif; ?>
					<?php if ( $has_last_log ) : ?>
					<a href="" class="show-log-lines"><?php esc_html_e( 'Show log output', 'friends' ); ?></a> |
					<?php endif; ?>
					<a href="" class="add-feed"><?php esc_html_e( 'Add a feed', 'friends' ); ?></a>
				</td>
			</tr>
			<?php if ( $args['friend']->can_refresh_feeds() ) : ?>
			<tr>
				<th><?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ esc_html_e( 'Dashboard' ); ?></th>
				<td>
					<label for="show_on_dashboard">
						<input type="checkbox" name="show_on_dashboard" id="show_on_dashboard" value="1" <?php checked( $args['show_on_dashboard'] ); ?> />
						<?php esc_html_e( 'Show a widget for this friend on your wp-admin dashboard', 'friends' ); ?>
					</label>
				</td>
			</tr>
			<tr>
				<th><?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ esc_html_e( 'Posts' ); ?></th>
				<td>
					<fieldset>
						<label for="show_on_friends_page">
							<input name="show_on_friends_page" type="checkbox" id="show_on_friends_page" value="1" <?php checked( '1', ! in_array( $args['friend']->user_login, $args['hide_from_friends_page'] ) ); ?>>
							<?php esc_html_e( 'Show posts on your friends page', 'friends' ); ?>
						</label>
					</fieldset>
					<fieldset>
					<a href="<?php echo esc_url( $args['friend']->get_local_friends_page_url() ); ?>">
						<?php
						// translators: %d is the number of posts.
						echo esc_html( sprintf( _n( 'View %d post', 'View %d posts', $args['post_count'], 'friends' ), $args['post_count'] ) );
						?>
					</a>
					<?php if ( apply_filters( 'friends_debug', false ) ) : ?>
						| <a href="<?php echo esc_url( self_admin_url( 'edit.php?post_type=' . Friends\Friends::CPT . '&author=' . $args['friend']->ID ) ); ?>">
							<?php
							// translators: %d is the number of posts.
							echo esc_html( sprintf( _n( 'View %d cached post', 'View %d cached posts', $args['post_count'], 'friends' ), $args['post_count'] ) );
							?>
						</a>

					<?php endif; ?>
					</fieldset>
				</td>
			</tr>
			<tr>
				<th><?php esc_html_e( 'Retention', 'friends' ); ?></th>
				<td>
					<fieldset>
						<div>
							<input type="checkbox" name="friends_enable_retention_days" id="friends_enable_retention_days" value="1" <?php checked( '1', $args['friend']->is_retention_days_enabled() ); ?> />
							<span id="friends_enable_retention_days_line" class="<?php echo esc_attr( $args['friend']->is_retention_days_enabled() ? '' : 'disabled' ); ?>">
							<?php
							echo wp_kses(
								sprintf(
									// translators: %s is an input field that allows specifying a number.
									__( 'Only keep posts for %s days', 'friends' ),
									'<input type="number" min="1" id="friends_retention_days" name="friends_retention_days" value="' . esc_attr( $args['friend']->get_retention_days() ) . '"' . ( $args['friend']->is_retention_days_enabled() ? '' : ' disabled="disabled"' ) . ' size="3">'
								),
								array(
									'input' => array(
										'type'     => array(),
										'min'      => array(),
										'id'       => array(),
										'name'     => array(),
										'value'    => array(),
										'size'     => array(),
										'disabled' => array(),
									),
								)
							);
							echo '. ';
							echo esc_html(
								sprintf(
								// translators: %s is a date.
									__( 'Earliest post: %s', 'friends' ),
									/* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ date_i18n( __( 'F j, Y' ), $args['earliest_post_date'] )
								)
							);
							if ( $args['global_retention_days_enabled'] ) {
								echo '. ';
								echo esc_html(
									sprintf(
									// translators: %s is a number of days.
										__( 'Global setting: %s days', 'friends' ),
										number_format_i18n( $args['global_retention_days'] )
									)
								);
							}

							?>
							</span>
						</div>
						<div>
							<input type="checkbox" name="friends_enable_retention_number" id="friends_enable_retention_number" value="1" <?php checked( '1', $args['friend']->is_retention_number_enabled() ); ?> />
							<span id="friends_enable_retention_number_line" class="<?php echo esc_attr( $args['friend']->is_retention_number_enabled() ? '' : 'disabled' ); ?>">
							<?php
							echo wp_kses(
								sprintf(
									// translators: %s is an input field that allows specifying a number.
									__( 'Only keep the last %s posts', 'friends' ),
									'<input type="number" min="1" id="friends_retention_number" name="friends_retention_number" value="' . esc_attr( $args['friend']->get_retention_number() ) . '"' . ( $args['friend']->is_retention_number_enabled() ? '' : ' disabled="disabled"' ) . ' size="3">'
								),
								array(
									'input' => array(
										'type'     => array(),
										'min'      => array(),
										'id'       => array(),
										'name'     => array(),
										'value'    => array(),
										'size'     => array(),
										'disabled' => array(),
									),
								)
							);
							if ( $args['global_retention_number_enabled'] ) {
								echo '. ';
								echo esc_html(
									sprintf(
										// translators: %s is a number.
										__( 'Global setting: %s posts', 'friends' ),
										number_format_i18n( $args['global_retention_number'] )
									)
								);
							}
							?>
							</span>
						</div>
					</fieldset>
					<p class="description">
						<?php
						echo esc_html(
							sprintf(
								// translators: %s is a size in bytes or kilo bytes (kB).
								__( 'Currently the posts use %s of disk space.', 'friends' ),
								size_format( $args['total_size'], 1 )
							)
						);
						?>
					</p>
					<p class="description">
						<?php
						echo ' ';
						esc_html_e( 'If you need to limit the amount of space, choose one of the options above (they can be combined).', 'friends' );
						echo ' ';
						esc_html_e( 'The next auto-delete will kick in when refreshing the feeds of this friend.', 'friends' );
						?>
					</p>
					</p>
					<p class="description">
						<?php
						esc_html_e( 'Lower global settings have preceedence over the friend settings.', 'friends' );
						?>
					</p>
				</td>
			</tr>
			<?php endif; ?>
			<?php do_action( 'friends_edit_feeds_table_end', $args['friend'] ); ?>
	</table>
	<?php do_action( 'friends_edit_feeds_after_form', $args['friend'] ); ?>
	<p class="submit">
		<input type="submit" id="submit" class="button button-primary" value="<?php /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ esc_html_e( 'Save Changes' ); ?>">
	</p>
</form>

```
