Version Description
- New: Facebook Groups are making their long-awaited return to the plugin! Just click the 'Log in and get my Access Token' button on the plugin's Settings page and select 'Facebook Group'. Follow the prompts to connect your Group and display your feed.
- Fix: Fixed an issue where a lists of groups or pages wouldn't be displayed when retrieving an Access Token due to a server configuration issue
- Fix: Photo icons weren't showing for album posts
- Tweak: Now uses the
visitor_posts
endpoint to display visitor post feeds
Download this release
Release Info
Developer | smashballoon |
Plugin | Custom Facebook Feed |
Version | 2.10 |
Comparing to | |
See all releases |
Code changes from version 2.9.1 to 2.10
- README.txt +13 -9
- css/cff-admin-style.css +86 -2
- custom-facebook-feed-admin.php +191 -50
- custom-facebook-feed.php +20 -76
- img/group-app.png +0 -0
- js/cff-admin-scripts.js +52 -17
README.txt
CHANGED
@@ -1,23 +1,22 @@
|
|
1 |
-
===
|
2 |
Contributors: smashballoon
|
3 |
-
Tags: Facebook, Facebook feed, Facebook posts, Facebook wall, Facebook page
|
4 |
Requires at least: 3.0
|
|
|
5 |
Tested up to: 5.2
|
6 |
-
Stable tag: 2.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
10 |
-
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
-
Display **
|
15 |
|
16 |
-
*"The perfect plugin with amazing support! What else do you want? Get it!"* - [JoeJeffries](http://wordpress.org/support/topic/you-dont-already-have-this)
|
17 |
|
18 |
-
*"I honestly cannot recommend this plugin enough. The plugin itself is gorgeous and super customizable, and if you run into trouble...support will get you out of it. Five Stars across the board."* - [pamsavoybarnett](http://wordpress.org/support/topic/love-this-plugin-w-awesome-support?
|
19 |
-
|
20 |
-
*"The positive reviews here say it all. John and SmashBalloon are delivering top-notch products and service -- something us website developers value greatly. If I could give them 10 Stars across the board I wouldn't hesitate. Cheers!"* - [AME Network](http://wordpress.org/support/topic/excellent-plugin-superior-support?replies=1)
|
21 |
|
22 |
= Features =
|
23 |
|
@@ -264,6 +263,11 @@ You no longer need your own Access Token to use the Custom Facebook Feed Plugin,
|
|
264 |
9. It's super easy to display your Facebook feed in any page or post
|
265 |
|
266 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
267 |
|
268 |
= 2.9.1 =
|
269 |
* New: Added support for v3.3 of the Facebook API.
|
1 |
+
=== Smash Balloon Social Post Feed ===
|
2 |
Contributors: smashballoon
|
3 |
+
Tags: Facebook, Facebook feed, Facebook posts, Facebook wall, Facebook page, facebook likebox, facebook feed, facebook plugin
|
4 |
Requires at least: 3.0
|
5 |
+
Requires PHP: 5.2
|
6 |
Tested up to: 5.2
|
7 |
+
Stable tag: 2.10
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
+
Formerly "Custom Facebook Feed". Display completely customizable Facebook feeds of any public Facebook page on your website.
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
Display Facebook posts on your website. **Completely customizable**, **responsive** and **search engine crawlable**. Display **multiple Facebook feeds** from **any public Facebook page**, and completely match the look and feel of the site with tons of customization options!
|
16 |
|
17 |
+
*"The perfect Facebook plugin with amazing support! What else do you want? Get it!"* - [JoeJeffries](http://wordpress.org/support/topic/you-dont-already-have-this?facebook)
|
18 |
|
19 |
+
*"I honestly cannot recommend this plugin enough. The plugin itself is gorgeous and super customizable, and if you run into trouble...support will get you out of it. Five Stars across the board."* - [pamsavoybarnett](http://wordpress.org/support/topic/love-this-plugin-w-awesome-support?facebook)
|
|
|
|
|
20 |
|
21 |
= Features =
|
22 |
|
263 |
9. It's super easy to display your Facebook feed in any page or post
|
264 |
|
265 |
== Changelog ==
|
266 |
+
= 2.10 =
|
267 |
+
* New: Facebook Groups are making their long-awaited return to the plugin! Just click the 'Log in and get my Access Token' button on the plugin's Settings page and select 'Facebook Group'. Follow the prompts to connect your Group and display your feed.
|
268 |
+
* Fix: Fixed an issue where a lists of groups or pages wouldn't be displayed when retrieving an Access Token due to a server configuration issue
|
269 |
+
* Fix: Photo icons weren't showing for album posts
|
270 |
+
* Tweak: Now uses the `visitor_posts` endpoint to display visitor post feeds
|
271 |
|
272 |
= 2.9.1 =
|
273 |
* New: Added support for v3.3 of the Facebook API.
|
css/cff-admin-style.css
CHANGED
@@ -988,7 +988,6 @@
|
|
988 |
font-size: 14px;
|
989 |
line-height: 1.6;
|
990 |
}
|
991 |
-
|
992 |
/* Tokens modal */
|
993 |
#cff-admin #cff_fb_login_modal.cff_modal_tokens{
|
994 |
display: block;
|
@@ -1024,7 +1023,8 @@
|
|
1024 |
}
|
1025 |
#cff-admin #cff-insert-token,
|
1026 |
#cff-admin .cff-insert-reviews-token,
|
1027 |
-
#cff-admin .cff-insert-both-tokens
|
|
|
1028 |
margin-top: 25px;
|
1029 |
float: left;
|
1030 |
clear: both;
|
@@ -1133,6 +1133,90 @@
|
|
1133 |
left: 7px;
|
1134 |
}
|
1135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1136 |
/* Admin footer share icons */
|
1137 |
#cff-admin #cff-admin-share-links{
|
1138 |
opacity: 0;
|
988 |
font-size: 14px;
|
989 |
line-height: 1.6;
|
990 |
}
|
|
|
991 |
/* Tokens modal */
|
992 |
#cff-admin #cff_fb_login_modal.cff_modal_tokens{
|
993 |
display: block;
|
1023 |
}
|
1024 |
#cff-admin #cff-insert-token,
|
1025 |
#cff-admin .cff-insert-reviews-token,
|
1026 |
+
#cff-admin .cff-insert-both-tokens,
|
1027 |
+
#cff-admin #cff-close-modal-primary-button{
|
1028 |
margin-top: 25px;
|
1029 |
float: left;
|
1030 |
clear: both;
|
1133 |
left: 7px;
|
1134 |
}
|
1135 |
|
1136 |
+
/* Groups option */
|
1137 |
+
#cff-admin .cff-login-options{
|
1138 |
+
width: 100%;
|
1139 |
+
padding: 20px 0 0 0;
|
1140 |
+
margin: 20px 0;
|
1141 |
+
box-sizing: border-box;
|
1142 |
+
border-top: 1px solid #eee;
|
1143 |
+
}
|
1144 |
+
#cff-admin .cff-login-options label{
|
1145 |
+
display: block;
|
1146 |
+
margin-bottom: 5px;
|
1147 |
+
font-weight: bold;
|
1148 |
+
}
|
1149 |
+
#cff-admin #cff_group_app{
|
1150 |
+
display: none;
|
1151 |
+
}
|
1152 |
+
/* Highlight admin groups in list */
|
1153 |
+
#cff-admin .cff-group-admin{
|
1154 |
+
position: relative;
|
1155 |
+
background: #eee;
|
1156 |
+
}
|
1157 |
+
#cff-admin .cff-group-admin-icon{
|
1158 |
+
position: absolute;
|
1159 |
+
top: 5px;
|
1160 |
+
right: 5px;
|
1161 |
+
padding: 5px 8px;
|
1162 |
+
background: rgba(255,255,255,0.5);
|
1163 |
+
border-radius: 5px;
|
1164 |
+
text-transform: uppercase;
|
1165 |
+
font-size: 11px;
|
1166 |
+
}
|
1167 |
+
#cff-admin .cff-group-admin-icon .fa{
|
1168 |
+
margin-right: 2px;
|
1169 |
+
font-size: 12px;
|
1170 |
+
}
|
1171 |
+
#cff-admin .cff-group-admin .cff-page-info-name {
|
1172 |
+
max-width: 85%;
|
1173 |
+
}
|
1174 |
+
#cff_token_expiration_note{
|
1175 |
+
display: none;
|
1176 |
+
width: 250px;
|
1177 |
+
padding: 5px 10px;
|
1178 |
+
float: right;
|
1179 |
+
font-size: 12px;
|
1180 |
+
margin-top: 11px;
|
1181 |
+
line-height: 1.3;
|
1182 |
+
border-radius: 5px;
|
1183 |
+
}
|
1184 |
+
#cff-group-member-directions{
|
1185 |
+
display: none;
|
1186 |
+
}
|
1187 |
+
/* App installation directions */
|
1188 |
+
#cff-group-installation{
|
1189 |
+
display: none;
|
1190 |
+
width: 100%;
|
1191 |
+
clear: both;
|
1192 |
+
text-align: left;
|
1193 |
+
}
|
1194 |
+
#cff-group-installation li{
|
1195 |
+
font-size: 14px;
|
1196 |
+
margin: 0 0 10px 0;
|
1197 |
+
line-height: 1.5;
|
1198 |
+
}
|
1199 |
+
#cff-group-installation li{
|
1200 |
+
position: relative;
|
1201 |
+
}
|
1202 |
+
#cff-group-app-tooltip{
|
1203 |
+
cursor: pointer;
|
1204 |
+
}
|
1205 |
+
#cff-group-app-screenshot{
|
1206 |
+
display: none;
|
1207 |
+
position: absolute;
|
1208 |
+
bottom: 42px;
|
1209 |
+
left: 0;
|
1210 |
+
margin-left: -85px;
|
1211 |
+
z-index: 10;
|
1212 |
+
border: 1px solid rgba(0,0,0,0.3);
|
1213 |
+
box-shadow: 0 0 0 5000px rgba(0,0,0,0.2);
|
1214 |
+
border-radius: 5px;
|
1215 |
+
}
|
1216 |
+
#cff-group-installation .button-secondary{
|
1217 |
+
margin: 25px 0 0 10px;
|
1218 |
+
}
|
1219 |
+
|
1220 |
/* Admin footer share icons */
|
1221 |
#cff-admin #cff-admin-share-links{
|
1222 |
opacity: 0;
|
custom-facebook-feed-admin.php
CHANGED
@@ -138,19 +138,32 @@ function cff_settings_page() {
|
|
138 |
|
139 |
<p>Log into your Facebook account using the button below and approve the plugin to connect your account.</p>
|
140 |
|
141 |
-
<p><a href="javascript:void(0);" id="cff_admin_cancel_btn" class="cff-admin-cancel-btn">Cancel</a>
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
|
|
|
|
150 |
|
151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
-
|
|
|
|
|
|
|
|
|
|
|
154 |
|
155 |
</div>
|
156 |
</div>
|
@@ -164,45 +177,162 @@ function cff_settings_page() {
|
|
164 |
if( $_GET['final_response'] == 'true' ){
|
165 |
|
166 |
$access_token = $_GET['access_token'];
|
167 |
-
$
|
168 |
-
$
|
169 |
-
$
|
170 |
-
|
171 |
-
if(
|
172 |
-
|
173 |
-
?>
|
174 |
-
<script type='text/javascript'>
|
175 |
-
jQuery(document).ready(function($) {
|
176 |
-
$('#cff_access_token').val('<?php echo $access_token ?>').addClass('cff-success');
|
177 |
-
//Check the own access token setting so it reveals token field
|
178 |
-
if( $('#cff_show_access_token:checked').length < 1 ){
|
179 |
-
$("#cff_show_access_token").trigger("change").prop( "checked", true );
|
180 |
-
}
|
181 |
-
});
|
182 |
-
</script>
|
183 |
|
184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
//Show the pages they manage
|
187 |
echo '<div id="cff_fb_login_modal" class="cff_modal_tokens cffnomodal">';
|
188 |
echo '<div class="cff_modal_box">';
|
189 |
echo '<div class="cff-managed-pages">';
|
190 |
|
191 |
-
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
|
|
|
|
|
|
|
|
200 |
echo '</div>';
|
201 |
-
}
|
202 |
-
echo '</div>';
|
203 |
|
204 |
-
|
205 |
-
|
|
|
|
|
206 |
|
207 |
echo '</div>';
|
208 |
echo '<a href="JavaScript:void(0);" class="cff-modal-close"><i class="fa fa-times"></i></a>';
|
@@ -210,7 +340,7 @@ function cff_settings_page() {
|
|
210 |
echo '</div>';
|
211 |
|
212 |
echo '<a href="JavaScript:void(0);" class="cff_admin_btn" id="cff_fb_show_tokens"><i class="fa fa-th-list" aria-hidden="true" style="font-size: 14px; margin-right: 8px;"></i>';
|
213 |
-
_e( "Show Available Pages", "custom-facebook-feed" );
|
214 |
echo '</a>';
|
215 |
|
216 |
}
|
@@ -222,8 +352,8 @@ function cff_settings_page() {
|
|
222 |
<table class="form-table">
|
223 |
<tbody>
|
224 |
<tr valign="top">
|
225 |
-
<th scope="row"><label><?php _e('Facebook Page ID<br /><i style="font-weight: normal; font-size: 12px;">ID of your Facebook Page</i>', 'custom-facebook-feed'); ?></label><code class="cff_shortcode"> id
|
226 |
-
Eg: id="
|
227 |
<td>
|
228 |
<input name="cff_page_id" id="cff_page_id" type="text" value="<?php esc_attr_e( $page_id_val, 'custom-facebook-feed' ); ?>" size="45" />
|
229 |
<a class="cff-tooltip-link" href="JavaScript:void(0);"><?php _e('What\'s my Page ID?', 'custom-facebook-feed'); ?></a>
|
@@ -239,8 +369,7 @@ function cff_settings_page() {
|
|
239 |
URL Format 3: <code>https://www.facebook.com/pages/your_page_name/<span class="cff-highlight">1234567890</span></code>
|
240 |
'); ?>
|
241 |
</li>
|
242 |
-
<li><?php _e('<b>Facebook Group</b><br />
|
243 |
-
<li><?php _e('To test that your ID is correct, you can copy and paste it into our <a href="http://smashballoondemo.com/" target="_blank">Pro demo</a>.'); ?></li>
|
244 |
</ul>
|
245 |
</div>
|
246 |
</td>
|
@@ -264,6 +393,21 @@ function cff_settings_page() {
|
|
264 |
<tbody>
|
265 |
<h3><?php _e('Settings', 'custom-facebook-feed'); ?></h3>
|
266 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
<tr valign="top">
|
268 |
<th scope="row"><label><?php _e('Show posts on my page by:', 'custom-facebook-feed'); ?></label><code class="cff_shortcode"> showpostsby
|
269 |
Eg: showpostsby=others</code></th>
|
@@ -273,9 +417,6 @@ function cff_settings_page() {
|
|
273 |
<option value="others" <?php if($cff_show_others_val == 'others' || $cff_show_others_val == 'on') echo 'selected="selected"' ?> ><?php _e('Page owner + other people', 'custom-facebook-feed'); ?></option>
|
274 |
<option value="onlyothers" <?php if($cff_show_others_val == 'onlyothers') echo 'selected="selected"' ?> ><?php _e('Only other people', 'custom-facebook-feed'); ?></option>
|
275 |
</select>
|
276 |
-
|
277 |
-
<p id="cff-others-only" style="font-size: 12px;"><b>Note:</b> Only displaying posts by other people works by retrieving your posts from Facebook and then filtering out the posts by the page owner. If this option doesn't display many posts then you can retrieve more by setting the post limit option (below) to a higher number (a number 15-20 greater than the number of posts you want to display).</p>
|
278 |
-
|
279 |
</td>
|
280 |
</tr>
|
281 |
|
@@ -590,10 +731,8 @@ function cff_settings_page() {
|
|
590 |
<?php
|
591 |
$cff_use_own_token = get_option( 'cff_show_access_token' );
|
592 |
$access_token = get_option( $access_token );
|
593 |
-
|
594 |
?>
|
595 |
-
<?php $posts_json = cff_fetchUrl("https://graph.facebook.com/".get_option( trim($page_id) )."/feed?access_token=". trim($access_token) ."&limit=1"); ?>
|
596 |
-
|
597 |
|
598 |
<textarea readonly="readonly" onclick="this.focus();this.select()" title="To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac)." style="width: 70%; height: 500px; white-space: pre; font-family: Menlo,Monaco,monospace;">
|
599 |
## SITE/SERVER INFO: ##
|
@@ -3972,5 +4111,7 @@ $notice_status = get_option( $option, false );
|
|
3972 |
if ( get_transient( $transient ) !== 'waiting' && $notice_status !== 'dismissed' ) {
|
3973 |
add_action( 'admin_notices', 'cff_rating_notice_html' );
|
3974 |
}
|
|
|
|
|
3975 |
|
3976 |
?>
|
138 |
|
139 |
<p>Log into your Facebook account using the button below and approve the plugin to connect your account.</p>
|
140 |
|
|
|
141 |
|
142 |
+
<div class="cff-login-options">
|
143 |
+
<label for="cff_login_type">Would you like to display a Facebook Page or Group?</label>
|
144 |
+
<select id="cff_login_type">
|
145 |
+
<option value="page">Facebook Page</option>
|
146 |
+
<option value="group">Facebook Group</option>
|
147 |
+
</select>
|
148 |
+
|
149 |
+
<p>
|
150 |
+
<a href="javascript:void(0);" id="cff_admin_cancel_btn" class="cff-admin-cancel-btn">Cancel</a>
|
151 |
|
152 |
+
<?php
|
153 |
+
$admin_url_state = admin_url('admin.php?page=cff-top');
|
154 |
+
//If the admin_url isn't returned correctly then use a fallback
|
155 |
+
if( $admin_url_state == '/wp-admin/admin.php?page=cff-top' || $admin_url_state == '/wp-admin/admin.php?page=cff-top&tab=configuration' ){
|
156 |
+
$admin_url_state = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
|
157 |
+
}
|
158 |
+
?>
|
159 |
+
<a href="https://api.smashballoon.com/facebook-login.php?state=<?php echo $admin_url_state; ?>" class="cff_admin_btn" id="cff_page_app"><i class="fa fa-facebook-square"></i> <?php _e( 'Continue', 'custom-facebook-feed' ); ?></a>
|
160 |
|
161 |
+
<a href="https://api.smashballoon.com/facebook-group-login.php?state=<?php echo $admin_url_state; ?>" class="cff_admin_btn" id="cff_group_app"><i class="fa fa-facebook-square"></i> <?php _e( 'Continue', 'custom-facebook-feed' ); ?></a>
|
162 |
+
|
163 |
+
</p>
|
164 |
+
</div>
|
165 |
+
|
166 |
+
<p style="font-size: 11px; margin-top: 25px;"><b>Please note:</b> this does not give us permission to manage your Facebook pages or groups, it simply allows the plugin to see a list that you manage and retrieve an Access Token.</p>
|
167 |
|
168 |
</div>
|
169 |
</div>
|
177 |
if( $_GET['final_response'] == 'true' ){
|
178 |
|
179 |
$access_token = $_GET['access_token'];
|
180 |
+
$cff_is_groups = false;
|
181 |
+
$pages_data_arr = '';
|
182 |
+
$groups_data_arr = '';
|
183 |
+
|
184 |
+
if( isset($_GET['group']) ){
|
185 |
+
//Get Groups
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
+
$cff_is_groups = true;
|
188 |
+
$groups_data_arr = '';
|
189 |
+
|
190 |
+
//Extend the user token by making a call to /me/accounts. User must be an admin of a page for this to work as won't work if the response is empty.
|
191 |
+
$url = 'https://graph.facebook.com/me/accounts?limit=500&access_token='.$access_token;
|
192 |
+
|
193 |
+
$accounts_data = cff_fetchUrl($url);
|
194 |
+
$accounts_data_arr = json_decode($accounts_data);
|
195 |
+
$cff_token_expiration = 'never';
|
196 |
+
if( empty($accounts_data_arr->data) ){
|
197 |
+
$cff_token_expiration = '60 days';
|
198 |
+
}
|
199 |
+
|
200 |
+
//Get User ID
|
201 |
+
$user_url = 'https://graph.facebook.com/me?fields=id&access_token='.$access_token;
|
202 |
+
$user_id_data = cff_fetchUrl($user_url);
|
203 |
+
|
204 |
+
if( !empty($user_id_data) ){
|
205 |
+
$user_id_data_arr = json_decode($user_id_data);
|
206 |
+
$user_id = $user_id_data_arr->id;
|
207 |
+
|
208 |
+
//Get groups they're admin of
|
209 |
+
$groups_admin_url = 'https://graph.facebook.com/'.$user_id.'/groups?admin_only=true&fields=name,id,picture&access_token='.$access_token;
|
210 |
+
$groups_admin_data = cff_fetchUrl($groups_admin_url);
|
211 |
+
$groups_admin_data_arr = json_decode($groups_admin_data);
|
212 |
+
|
213 |
+
//Get member groups
|
214 |
+
$groups_url = 'https://graph.facebook.com/'.$user_id.'/groups?admin_only=false&fields=name,id,picture&access_token='.$access_token;
|
215 |
+
$groups_data = cff_fetchUrl($groups_url);
|
216 |
+
$groups_data_arr = json_decode($groups_data);
|
217 |
+
|
218 |
+
// $pages_data_arr = $groups_data_arr;
|
219 |
+
}
|
220 |
} else {
|
221 |
+
//Get Pages
|
222 |
+
|
223 |
+
$url = 'https://graph.facebook.com/me/accounts?limit=500&access_token='.$access_token;
|
224 |
+
$pages_data = cff_fetchUrl($url);
|
225 |
+
$pages_data_arr = json_decode($pages_data);
|
226 |
+
|
227 |
+
if( empty($pages_data_arr->data) ){
|
228 |
+
//If they don't manage any pages then just use the user token instead
|
229 |
+
?>
|
230 |
+
<script type='text/javascript'>
|
231 |
+
jQuery(document).ready(function($) {
|
232 |
+
$('#cff_access_token').val('<?php echo $access_token ?>').addClass('cff-success');
|
233 |
+
//Check the own access token setting so it reveals token field
|
234 |
+
if( $('#cff_show_access_token:checked').length < 1 ){
|
235 |
+
$("#cff_show_access_token").trigger("change").prop( "checked", true );
|
236 |
+
}
|
237 |
+
});
|
238 |
+
</script>
|
239 |
+
<?php
|
240 |
+
}
|
241 |
+
|
242 |
+
}
|
243 |
+
|
244 |
+
|
245 |
+
if( !empty($pages_data_arr->data) || $cff_is_groups ){
|
246 |
//Show the pages they manage
|
247 |
echo '<div id="cff_fb_login_modal" class="cff_modal_tokens cffnomodal">';
|
248 |
echo '<div class="cff_modal_box">';
|
249 |
echo '<div class="cff-managed-pages">';
|
250 |
|
251 |
+
if( $cff_is_groups ){
|
252 |
+
//GROUPS
|
253 |
+
|
254 |
+
if( empty($groups_data_arr->data) && empty($groups_admin_data_arr->data) ){
|
255 |
+
echo '<h3>No Groups Returned</h3>';
|
256 |
+
echo "<p>Facebook has not returned any groups for your user. It is only possible to display a feed from a group which you are either an admin or a member. Please note, if you are not an admin of the group then it is required that an admin add our app in the group settings in order to display a feed.</p><p>Please either create or join a Facebook group and then follow the directions when connecting your account on this page.</p>";
|
257 |
+
echo '<a href="JavaScript:void(0);" class="button button-primary" id="cff-close-modal-primary-button">Close</a>';
|
258 |
+
} else {
|
259 |
+
|
260 |
+
echo '<div class="cff-groups-list">';
|
261 |
+
echo '<p style="margin-top: 0;"><i class="fa fa-check-circle" aria-hidden="true" style="font-size: 15px; margin: 0 8px 0 2px;"></i>Select a Facebook group below to get an Access Token.</p>';
|
262 |
+
|
263 |
+
echo '<div class="cff-pages-wrap">';
|
264 |
+
//Admin groups
|
265 |
+
foreach ( $groups_admin_data_arr->data as $page => $group_data ) {
|
266 |
+
echo '<div class="cff-managed-page cff-group-admin';
|
267 |
+
if( $group_data->id == $page_id_val ) echo ' cff-page-selected';
|
268 |
+
echo '" data-token="'.$access_token.'" data-page-id="'.$group_data->id.'" id="cff_'.$group_data->id.'">';
|
269 |
+
echo '<p>';
|
270 |
+
if( isset( $group_data->picture->data->url ) ) echo '<img class="cff-page-avatar" border="0" height="50" width="50" src="'.$group_data->picture->data->url.'">';
|
271 |
+
echo '<b class="cff-page-info-name">'.$group_data->name.'</b><span class="cff-page-info">(Group ID: '.$group_data->id.')</span></p>';
|
272 |
+
echo '<div class="cff-group-admin-icon"><i class="fa fa-user" aria-hidden="true"></i> Admin</div>';
|
273 |
+
echo '</div>';
|
274 |
+
}
|
275 |
+
//Member groups
|
276 |
+
foreach ( $groups_data_arr->data as $page => $group_data ) {
|
277 |
+
echo '<div class="cff-managed-page';
|
278 |
+
if( $group_data->id == $page_id_val ) echo ' cff-page-selected';
|
279 |
+
echo '" data-token="'.$access_token.'" data-page-id="'.$group_data->id.'" id="cff_'.$group_data->id.'">';
|
280 |
+
echo '<p>';
|
281 |
+
if( isset( $group_data->picture->data->url ) ) echo '<img class="cff-page-avatar" border="0" height="50" width="50" src="'.$group_data->picture->data->url.'">';
|
282 |
+
echo '<b class="cff-page-info-name">'.$group_data->name.'</b><span class="cff-page-info">(Group ID: '.$group_data->id.')</span></p>';
|
283 |
+
echo '</div>';
|
284 |
+
}
|
285 |
+
echo '</div>';
|
286 |
+
echo '<a href="JavaScript:void(0);" class="button button-primary cff-group-btn" id="cff-insert-token" disabled="disabled">Use token for this Group</a>';
|
287 |
+
if( $cff_token_expiration == "60 days" ) echo '<div id="cff_token_expiration_note" class="cff-error"><b>Important:</b> This token will expire in 60 days.<br /><a href="https://smashballoon.com/extending-a-group-access-token-so-it-never-expires/" target="_blank">Extend token so it never expires</a></div>';
|
288 |
+
echo '</div>';
|
289 |
+
|
290 |
+
echo '<div id="cff-group-installation">';
|
291 |
+
echo '<h3>Important</h3>';
|
292 |
+
|
293 |
+
echo '<div id="cff-group-admin-directions">';
|
294 |
+
echo '<p>To display a feed from your group you need to add our app in your Facebook group settings:</p>';
|
295 |
+
echo '<ul>';
|
296 |
+
echo '<li><b>1)</b> Go to your group settings page by clicking <a id="cff-group-edit" href="https://www.facebook.com/groups/" target="_blank">here<i class="fa fa-external-link" aria-hidden="true" style="font-size: 13px; position: relative; top: 2px; margin-left: 5px;"></i></a></li>';
|
297 |
+
echo '<li><b>2)</b> In the "Apps" section click "Add Apps".</li>';
|
298 |
+
echo '<li><b>3)</b> Search for "Smash Balloon" and select our app (<a id="cff-group-app-tooltip">screenshot</a>).<img id="cff-group-app-screenshot" src="'. plugins_url( "img/group-app.png" , __FILE__ ) .'" alt="Thumbnail Layout" /></li>';
|
299 |
+
echo '<li><b>4</b>) Click "Add".</li>';
|
300 |
+
echo '</ul>';
|
301 |
+
|
302 |
+
echo '<p style="margin-bottom: 10px;">You can now use the plugin to display a feed from your group.</p>';
|
303 |
+
echo '</div>';
|
304 |
+
|
305 |
+
echo '<div id="cff-group-member-directions">';
|
306 |
+
echo '<p>To display a feed from this group an admin needs to first add our app in the group settings. Please ask an admin to follow the directions <a href="https://smashballoon.com/adding-our-app-to-a-facebook-group/" target="_blank">here</a> to add our app.</p>';
|
307 |
+
echo '<p>Once this is done you will then be able to display a feed from this group.</p>';
|
308 |
+
echo '</div>';
|
309 |
+
|
310 |
+
echo '<a href="JavaScript:void(0);" class="button button-primary" id="cff-close-modal-primary-button">Done</a>';
|
311 |
+
echo '<a href="https://smashballoon.com/display-facebook-group-feed/" target="_blank" class="button button-secondary"><i class="fa fa-life-ring"></i> Help</a>';
|
312 |
+
echo '</div>';
|
313 |
+
|
314 |
+
}
|
315 |
+
|
316 |
+
} else {
|
317 |
+
//PAGES
|
318 |
|
319 |
+
echo '<p style="margin-top: 0;"><i class="fa fa-check-circle" aria-hidden="true" style="font-size: 15px; margin: 0 8px 0 2px;"></i>Select a Facebook page below to get an Access Token.</p>';
|
320 |
+
echo '<p class="cff-tokens-note">Note: This Access Token will allow you to display posts from <b style="font-weight: 900;">any</b> public Facebook page, not just the one selected.</p>';
|
321 |
+
|
322 |
+
echo '<div class="cff-pages-wrap">';
|
323 |
+
foreach ( $pages_data_arr->data as $page => $page_data ) {
|
324 |
+
echo '<div class="cff-managed-page ';
|
325 |
+
if( $page_data->id == $page_id_val ) echo 'cff-page-selected';
|
326 |
+
echo '" data-token="'.$page_data->access_token.'" data-page-id="'.$page_data->id.'">';
|
327 |
+
echo '<p><img class="cff-page-avatar" border="0" height="50" width="50" src="https://graph.facebook.com/'.$page_data->id.'/picture"><b class="cff-page-info-name">'.$page_data->name.'</b><span class="cff-page-info">(Page ID: '.$page_data->id.')</span></p>';
|
328 |
+
echo '</div>';
|
329 |
+
}
|
330 |
echo '</div>';
|
|
|
|
|
331 |
|
332 |
+
$cff_use_token_text = 'Use token for this page';
|
333 |
+
echo '<a href="JavaScript:void(0);" id="cff-insert-token" class="button button-primary" disabled="disabled">'.$cff_use_token_text.'</a>';
|
334 |
+
|
335 |
+
}
|
336 |
|
337 |
echo '</div>';
|
338 |
echo '<a href="JavaScript:void(0);" class="cff-modal-close"><i class="fa fa-times"></i></a>';
|
340 |
echo '</div>';
|
341 |
|
342 |
echo '<a href="JavaScript:void(0);" class="cff_admin_btn" id="cff_fb_show_tokens"><i class="fa fa-th-list" aria-hidden="true" style="font-size: 14px; margin-right: 8px;"></i>';
|
343 |
+
$cff_is_groups ? _e( "Show Available Groups", "custom-facebook-feed" ) : _e( "Show Available Pages", "custom-facebook-feed" );
|
344 |
echo '</a>';
|
345 |
|
346 |
}
|
352 |
<table class="form-table">
|
353 |
<tbody>
|
354 |
<tr valign="top">
|
355 |
+
<th scope="row"><label><?php _e('Facebook Page ID<br /><i style="font-weight: normal; font-size: 12px;">ID of your Facebook Page or Group</i>', 'custom-facebook-feed'); ?></label><code class="cff_shortcode"> id
|
356 |
+
Eg: id="YOUR_PAGE_OR_GROUP_ID"</code></th>
|
357 |
<td>
|
358 |
<input name="cff_page_id" id="cff_page_id" type="text" value="<?php esc_attr_e( $page_id_val, 'custom-facebook-feed' ); ?>" size="45" />
|
359 |
<a class="cff-tooltip-link" href="JavaScript:void(0);"><?php _e('What\'s my Page ID?', 'custom-facebook-feed'); ?></a>
|
369 |
URL Format 3: <code>https://www.facebook.com/pages/your_page_name/<span class="cff-highlight">1234567890</span></code>
|
370 |
'); ?>
|
371 |
</li>
|
372 |
+
<li><?php _e('<b>Facebook Group</b><br />You can find the ID of your Facebook <b>Group</b> from the URL, like so: <code>https://www.facebook.com/groups/<span class="cff-highlight">1234567890</span></code>'); ?></li>
|
|
|
373 |
</ul>
|
374 |
</div>
|
375 |
</td>
|
393 |
<tbody>
|
394 |
<h3><?php _e('Settings', 'custom-facebook-feed'); ?></h3>
|
395 |
|
396 |
+
<tr valign="top" class="cff-page-type">
|
397 |
+
<th scope="row"><label><?php _e('Is it a page or group?'); ?></label><code class="cff_shortcode"> pagetype
|
398 |
+
Eg: pagetype=group</code></th>
|
399 |
+
<td>
|
400 |
+
<select name="cff_page_type" id="cff_page_type" style="width: 100px;">
|
401 |
+
<option value="page" <?php if($cff_page_type_val == "page") echo 'selected="selected"' ?> ><?php _e('Page'); ?></option>
|
402 |
+
<option value="group" <?php if($cff_page_type_val == "group") echo 'selected="selected"' ?> ><?php _e('Group'); ?></option>
|
403 |
+
<option value="profile" <?php if($cff_page_type_val == "profile") echo 'selected="selected"' ?> ><?php _e('Profile'); ?></option>
|
404 |
+
</select>
|
405 |
+
<div class="cff-notice cff-profile-error cff-page-type">
|
406 |
+
<?php _e("<p>Due to Facebook's privacy policy you're not able to display posts from a personal profile, only from a public Facebook Page.</p><p>If you're using a profile to represent a business, organization, product, public figure or the like, then Facebook recommends <a href='http://www.facebook.com/help/175644189234902/' target='_blank'>converting your profile to a page</a>. There are many advantages to using pages over profiles, and once you've converted then the plugin will be able to successfully retrieve and display all of your posts.</p>", 'custom-facebook-feed'); ?>
|
407 |
+
</div>
|
408 |
+
</td>
|
409 |
+
</tr>
|
410 |
+
|
411 |
<tr valign="top">
|
412 |
<th scope="row"><label><?php _e('Show posts on my page by:', 'custom-facebook-feed'); ?></label><code class="cff_shortcode"> showpostsby
|
413 |
Eg: showpostsby=others</code></th>
|
417 |
<option value="others" <?php if($cff_show_others_val == 'others' || $cff_show_others_val == 'on') echo 'selected="selected"' ?> ><?php _e('Page owner + other people', 'custom-facebook-feed'); ?></option>
|
418 |
<option value="onlyothers" <?php if($cff_show_others_val == 'onlyothers') echo 'selected="selected"' ?> ><?php _e('Only other people', 'custom-facebook-feed'); ?></option>
|
419 |
</select>
|
|
|
|
|
|
|
420 |
</td>
|
421 |
</tr>
|
422 |
|
731 |
<?php
|
732 |
$cff_use_own_token = get_option( 'cff_show_access_token' );
|
733 |
$access_token = get_option( $access_token );
|
734 |
+
$posts_json = cff_fetchUrl("https://graph.facebook.com/".get_option( trim($page_id) )."/feed?access_token=". trim($access_token) ."&limit=1");
|
735 |
?>
|
|
|
|
|
736 |
|
737 |
<textarea readonly="readonly" onclick="this.focus();this.select()" title="To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac)." style="width: 70%; height: 500px; white-space: pre; font-family: Menlo,Monaco,monospace;">
|
738 |
## SITE/SERVER INFO: ##
|
4111 |
if ( get_transient( $transient ) !== 'waiting' && $notice_status !== 'dismissed' ) {
|
4112 |
add_action( 'admin_notices', 'cff_rating_notice_html' );
|
4113 |
}
|
4114 |
+
//Uncomment below to show notice
|
4115 |
+
// add_action( 'admin_notices', 'cff_rating_notice_html' );
|
4116 |
|
4117 |
?>
|
custom-facebook-feed.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Custom Facebook Feed
|
4 |
-
Plugin URI:
|
5 |
Description: Add completely customizable Facebook feeds to your WordPress site
|
6 |
-
Version: 2.
|
7 |
Author: Smash Balloon
|
8 |
Author URI: http://smashballoon.com/
|
9 |
License: GPLv2 or later
|
@@ -24,7 +24,7 @@ along with this program; if not, write to the Free Software
|
|
24 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
25 |
*/
|
26 |
|
27 |
-
define('CFFVER', '2.
|
28 |
|
29 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
30 |
//Include admin
|
@@ -696,9 +696,6 @@ function display_cff($atts) {
|
|
696 |
//If the 'Enter my own Access Token' box is unchecked then don't use the user's access token, even if there's one in the field
|
697 |
get_option('cff_show_access_token') ? $cff_show_access_token = true : $cff_show_access_token = false;
|
698 |
|
699 |
-
//If there's no Access Token then use a default
|
700 |
-
if ($access_token == '' || !$cff_show_access_token) $access_token = '198080700214649|natEgdD5R82UoiLXL5UsUK82-O8';
|
701 |
-
|
702 |
//Check whether a Page ID has been defined
|
703 |
if ($page_id == '') {
|
704 |
echo "Please enter the Page ID of the Facebook feed you'd like to display. You can do this in either the Custom Facebook Feed plugin settings or in the shortcode itself. For example, [custom-facebook-feed id=YOUR_PAGE_ID_HERE].<br /><br />";
|
@@ -739,13 +736,11 @@ function display_cff($atts) {
|
|
739 |
|
740 |
//Show posts ONLY by others
|
741 |
if ( $show_posts_by == 'onlyothers' && !$cff_is_group ) {
|
742 |
-
$graph_query = '
|
743 |
$cff_show_only_others = true;
|
744 |
}
|
745 |
-
|
746 |
}
|
747 |
|
748 |
-
|
749 |
$cff_post_limit = $atts['limit'];
|
750 |
|
751 |
//If the limit isn't set then set it to be 7 more than the number of posts defined
|
@@ -886,7 +881,7 @@ function display_cff($atts) {
|
|
886 |
//ALL POSTS
|
887 |
if (!$cff_events_only){
|
888 |
|
889 |
-
$cff_posts_json_url = 'https://graph.facebook.com/
|
890 |
|
891 |
if( $cff_show_access_token && strlen($access_token) > 130 ){
|
892 |
//If using a Page Access Token then set caching time to be minimum of 5 minutes
|
@@ -944,29 +939,20 @@ function display_cff($atts) {
|
|
944 |
$cff_content .= '<div class="cff-error-msg"><p>Unable to display Facebook posts.<br/><a href="javascript:void(0);" id="cff-show-error" onclick="cffShowError()">Show error</a>';
|
945 |
$cff_content .= '<script type="text/javascript">function cffShowError() { document.getElementById("cff-error-reason").style.display = "block"; document.getElementById("cff-show-error").style.display = "none"; }</script>';
|
946 |
$cff_content .= '</p><div id="cff-error-reason">';
|
|
|
|
|
|
|
|
|
|
|
947 |
|
948 |
-
if( $
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
} else {
|
953 |
-
|
954 |
-
if( isset($FBdata->error->message) ) $cff_content .= 'Error: ' . $FBdata->error->message;
|
955 |
-
if( isset($FBdata->error->type) ) $cff_content .= '<br />Type: ' . $FBdata->error->type;
|
956 |
-
if( isset($FBdata->error->code) ) $cff_content .= '<br />Code: ' . $FBdata->error->code;
|
957 |
-
if( isset($FBdata->error->error_subcode) ) $cff_content .= '<br />Subcode: ' . $FBdata->error->error_subcode;
|
958 |
-
|
959 |
-
if( isset($FBdata->error_msg) ) $cff_content .= 'Error: ' . $FBdata->error_msg;
|
960 |
-
if( isset($FBdata->error_code) ) $cff_content .= '<br />Code: ' . $FBdata->error_code;
|
961 |
-
|
962 |
-
if($FBdata == null) $cff_content .= 'Error: Server configuration issue';
|
963 |
-
|
964 |
-
if( empty($FBdata->error) && empty($FBdata->error_msg) && $FBdata !== null ) $cff_content .= 'Error: No posts available for this Facebook ID';
|
965 |
|
966 |
-
|
967 |
|
968 |
-
|
969 |
-
|
970 |
|
971 |
$cff_content .= '</div></div>'; //End .cff-error-msg and #cff-error-reason
|
972 |
//Only display errors to admins
|
@@ -1056,14 +1042,6 @@ function display_cff($atts) {
|
|
1056 |
break;
|
1057 |
}
|
1058 |
|
1059 |
-
//ONLY show posts by others
|
1060 |
-
if ( $cff_show_only_others ) {
|
1061 |
-
//If the post author's ID is the same as the page ID then don't show the post
|
1062 |
-
if( isset($news->from) ){
|
1063 |
-
if ( $numeric_page_id == $news->from->id ) $cff_show_post = false;
|
1064 |
-
}
|
1065 |
-
}
|
1066 |
-
|
1067 |
//Is it a duplicate post?
|
1068 |
if (!isset($prev_post_message)) $prev_post_message = '';
|
1069 |
if (!isset($prev_post_link)) $prev_post_link = '';
|
@@ -1127,44 +1105,10 @@ function display_cff($atts) {
|
|
1127 |
|
1128 |
//Is it an album?
|
1129 |
$cff_album = false;
|
1130 |
-
$num_photos = 0;
|
1131 |
-
|
1132 |
if( isset($news->status_type) ){
|
1133 |
if( $news->status_type == 'added_photos' ){
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
//Only matches number with a space after them
|
1138 |
-
preg_match('!\d+ !', $str, $matches);
|
1139 |
-
|
1140 |
-
|
1141 |
-
(isset($matches[0])) ? $num_photos = $matches[0] : $num_photos = 0;
|
1142 |
-
|
1143 |
-
//If the story contains a number...
|
1144 |
-
if ( $num_photos > 1 ) {
|
1145 |
-
|
1146 |
-
//... and the link is to an album then it most likely has photo attachments
|
1147 |
-
$albumLinkArr1 = explode('photos/a.', $link);
|
1148 |
-
if( isset($albumLinkArr1[1]) ) $albumLinkArr2 = explode('.', $albumLinkArr1[1]);
|
1149 |
-
|
1150 |
-
//If it has an album link then set the post type to be album
|
1151 |
-
if( isset($albumLinkArr1[1]) ){
|
1152 |
-
|
1153 |
-
$cff_album = true;
|
1154 |
-
|
1155 |
-
//Change the Post ID to be to the post about adding photos to the album
|
1156 |
-
$cff_post_id = $PostID[0] . '_' . $albumLinkArr2[0];
|
1157 |
-
|
1158 |
-
//Link to the album instead of the photo
|
1159 |
-
$album_link = str_replace('photo.php?','media/set/?',$link);
|
1160 |
-
$link = "https://www.facebook.com/" . $page_id . "/posts/" . $PostID[1];
|
1161 |
-
|
1162 |
-
//If the album link is a new format then link it to the post
|
1163 |
-
$album_link_check = 'media/set/?';
|
1164 |
-
if( stripos($album_link, $album_link_check) !== true ) $album_link = $link;
|
1165 |
-
|
1166 |
-
}
|
1167 |
-
|
1168 |
}
|
1169 |
}
|
1170 |
}
|
@@ -1879,9 +1823,9 @@ function display_cff($atts) {
|
|
1879 |
|
1880 |
$cff_media_link = '';
|
1881 |
|
1882 |
-
if( $cff_show_media_link && ($cff_post_type == 'photo' || $cff_post_type == 'video') ){
|
1883 |
$cff_media_link .= '<p class="cff-media-link"><a href="'.$link.'" '.$target.' style="color: #'.$cff_posttext_link_color.';"><span style="padding-right: 5px;" class="fa fas fa-';
|
1884 |
-
if($cff_post_type == 'photo') $cff_media_link .= 'picture-o fa-image" aria-hidden="true"></span>'. $cff_translate_photo_text;
|
1885 |
// if($cff_post_type == 'video') $cff_media_link .= 'file-video-o';
|
1886 |
if($cff_post_type == 'video') $cff_media_link .= 'video-camera fa-video" aria-hidden="true"></span>'. $cff_translate_video_text;
|
1887 |
$cff_media_link .= '</a></p>';
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Custom Facebook Feed
|
4 |
+
Plugin URI: https://smashballoon.com/custom-facebook-feed
|
5 |
Description: Add completely customizable Facebook feeds to your WordPress site
|
6 |
+
Version: 2.10
|
7 |
Author: Smash Balloon
|
8 |
Author URI: http://smashballoon.com/
|
9 |
License: GPLv2 or later
|
24 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
25 |
*/
|
26 |
|
27 |
+
define('CFFVER', '2.10');
|
28 |
|
29 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
30 |
//Include admin
|
696 |
//If the 'Enter my own Access Token' box is unchecked then don't use the user's access token, even if there's one in the field
|
697 |
get_option('cff_show_access_token') ? $cff_show_access_token = true : $cff_show_access_token = false;
|
698 |
|
|
|
|
|
|
|
699 |
//Check whether a Page ID has been defined
|
700 |
if ($page_id == '') {
|
701 |
echo "Please enter the Page ID of the Facebook feed you'd like to display. You can do this in either the Custom Facebook Feed plugin settings or in the shortcode itself. For example, [custom-facebook-feed id=YOUR_PAGE_ID_HERE].<br /><br />";
|
736 |
|
737 |
//Show posts ONLY by others
|
738 |
if ( $show_posts_by == 'onlyothers' && !$cff_is_group ) {
|
739 |
+
$graph_query = 'visitor_posts';
|
740 |
$cff_show_only_others = true;
|
741 |
}
|
|
|
742 |
}
|
743 |
|
|
|
744 |
$cff_post_limit = $atts['limit'];
|
745 |
|
746 |
//If the limit isn't set then set it to be 7 more than the number of posts defined
|
881 |
//ALL POSTS
|
882 |
if (!$cff_events_only){
|
883 |
|
884 |
+
$cff_posts_json_url = 'https://graph.facebook.com/v4.0/' . $page_id . '/' . $graph_query . '?fields=id,from{picture,id,name,link},message,message_tags,story,story_tags,status_type,created_time,backdated_time,call_to_action,attachments{title,description,media_type,unshimmed_url,target{id},media{source}}&access_token=' . $access_token . '&limit=' . $cff_post_limit . '&locale=' . $cff_locale . $cff_ssl;
|
885 |
|
886 |
if( $cff_show_access_token && strlen($access_token) > 130 ){
|
887 |
//If using a Page Access Token then set caching time to be minimum of 5 minutes
|
939 |
$cff_content .= '<div class="cff-error-msg"><p>Unable to display Facebook posts.<br/><a href="javascript:void(0);" id="cff-show-error" onclick="cffShowError()">Show error</a>';
|
940 |
$cff_content .= '<script type="text/javascript">function cffShowError() { document.getElementById("cff-error-reason").style.display = "block"; document.getElementById("cff-show-error").style.display = "none"; }</script>';
|
941 |
$cff_content .= '</p><div id="cff-error-reason">';
|
942 |
+
|
943 |
+
if( isset($FBdata->error->message) ) $cff_content .= 'Error: ' . $FBdata->error->message;
|
944 |
+
if( isset($FBdata->error->type) ) $cff_content .= '<br />Type: ' . $FBdata->error->type;
|
945 |
+
if( isset($FBdata->error->code) ) $cff_content .= '<br />Code: ' . $FBdata->error->code;
|
946 |
+
if( isset($FBdata->error->error_subcode) ) $cff_content .= '<br />Subcode: ' . $FBdata->error->error_subcode;
|
947 |
|
948 |
+
if( isset($FBdata->error_msg) ) $cff_content .= 'Error: ' . $FBdata->error_msg;
|
949 |
+
if( isset($FBdata->error_code) ) $cff_content .= '<br />Code: ' . $FBdata->error_code;
|
950 |
+
|
951 |
+
if($FBdata == null) $cff_content .= 'Error: Server configuration issue';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
952 |
|
953 |
+
if( empty($FBdata->error) && empty($FBdata->error_msg) && $FBdata !== null ) $cff_content .= 'Error: No posts available for this Facebook ID';
|
954 |
|
955 |
+
$cff_content .= '<br />Please refer to our <a href="https://smashballoon.com/custom-facebook-feed/docs/errors/" target="_blank">Error Message Reference</a>.';
|
|
|
956 |
|
957 |
$cff_content .= '</div></div>'; //End .cff-error-msg and #cff-error-reason
|
958 |
//Only display errors to admins
|
1042 |
break;
|
1043 |
}
|
1044 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1045 |
//Is it a duplicate post?
|
1046 |
if (!isset($prev_post_message)) $prev_post_message = '';
|
1047 |
if (!isset($prev_post_link)) $prev_post_link = '';
|
1105 |
|
1106 |
//Is it an album?
|
1107 |
$cff_album = false;
|
|
|
|
|
1108 |
if( isset($news->status_type) ){
|
1109 |
if( $news->status_type == 'added_photos' ){
|
1110 |
+
if( isset($news->attachments) ){
|
1111 |
+
if( $news->attachments->data[0]->media_type == 'album' ) $cff_album = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1112 |
}
|
1113 |
}
|
1114 |
}
|
1823 |
|
1824 |
$cff_media_link = '';
|
1825 |
|
1826 |
+
if( $cff_show_media_link && ($cff_post_type == 'photo' || $cff_post_type == 'video' || $cff_album) ){
|
1827 |
$cff_media_link .= '<p class="cff-media-link"><a href="'.$link.'" '.$target.' style="color: #'.$cff_posttext_link_color.';"><span style="padding-right: 5px;" class="fa fas fa-';
|
1828 |
+
if($cff_post_type == 'photo' || $cff_album) $cff_media_link .= 'picture-o fa-image" aria-hidden="true"></span>'. $cff_translate_photo_text;
|
1829 |
// if($cff_post_type == 'video') $cff_media_link .= 'file-video-o';
|
1830 |
if($cff_post_type == 'video') $cff_media_link .= 'video-camera fa-video" aria-hidden="true"></span>'. $cff_translate_video_text;
|
1831 |
$cff_media_link .= '</a></p>';
|
img/group-app.png
ADDED
Binary file
|
js/cff-admin-scripts.js
CHANGED
@@ -91,21 +91,7 @@ jQuery(document).ready(function($) {
|
|
91 |
//Show the JSON
|
92 |
jQuery('#cff-api-test-result textarea').css('display', 'block');
|
93 |
});
|
94 |
-
|
95 |
-
|
96 |
-
//If 'Others only' is selected then show a note
|
97 |
-
var $cffOthersOnly = jQuery('#cff-others-only');
|
98 |
-
|
99 |
-
if ( jQuery("#cff_show_others option:selected").val() == 'onlyothers' ) $cffOthersOnly.show();
|
100 |
|
101 |
-
jQuery("#cff_show_others").change(function() {
|
102 |
-
if ( jQuery("#cff_show_others option:selected").val() == 'onlyothers' ) {
|
103 |
-
$cffOthersOnly.show();
|
104 |
-
} else {
|
105 |
-
$cffOthersOnly.hide();
|
106 |
-
}
|
107 |
-
});
|
108 |
-
|
109 |
|
110 |
//If '__ days ago' date is selected then show 'Translate this'
|
111 |
var $cffTranslateDate = jQuery('#cff-translate-date');
|
@@ -216,17 +202,20 @@ jQuery(document).ready(function($) {
|
|
216 |
$('#cff_admin_cancel_btn').on('click', function(){
|
217 |
$('#cff_fb_login_modal').hide();
|
218 |
});
|
219 |
-
$('.cff-modal-close').on('click', function(){
|
220 |
$('.cff_modal_tokens').hide();
|
221 |
});
|
222 |
$('#cff_fb_show_tokens').on('click', function(){
|
223 |
-
$('.cff_modal_tokens').show();
|
|
|
224 |
});
|
225 |
|
226 |
//Select a page for token
|
227 |
$('.cff-managed-page').on('click', function(){
|
228 |
$('#cff-insert-token, .cff-insert-reviews-token, .cff-insert-both-tokens').removeAttr('disabled');
|
229 |
|
|
|
|
|
230 |
$(this).siblings().removeClass('cff-page-selected');
|
231 |
$(this).addClass('cff-page-selected');
|
232 |
});
|
@@ -235,7 +224,30 @@ jQuery(document).ready(function($) {
|
|
235 |
$('#cff-insert-token').on('click', function(){
|
236 |
$('#cff_access_token').val( $('.cff-page-selected').attr('data-token') ).addClass('cff-success');
|
237 |
if( $('#cff_page_id').val().trim() == '' ) $('#cff_page_id').val( $('.cff-page-selected').attr('data-page-id') );
|
238 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
|
240 |
location.hash = "cffnomodal";
|
241 |
});
|
@@ -245,6 +257,17 @@ jQuery(document).ready(function($) {
|
|
245 |
$('.cff_modal_tokens').removeClass('cffnomodal');
|
246 |
}
|
247 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
//Load the admin share widgets
|
249 |
$('#cff-admin-show-share-links').on('click', function(){
|
250 |
$(this).fadeOut();
|
@@ -255,4 +278,16 @@ jQuery(document).ready(function($) {
|
|
255 |
}, 500);
|
256 |
});
|
257 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
258 |
});
|
91 |
//Show the JSON
|
92 |
jQuery('#cff-api-test-result textarea').css('display', 'block');
|
93 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
//If '__ days ago' date is selected then show 'Translate this'
|
97 |
var $cffTranslateDate = jQuery('#cff-translate-date');
|
202 |
$('#cff_admin_cancel_btn').on('click', function(){
|
203 |
$('#cff_fb_login_modal').hide();
|
204 |
});
|
205 |
+
$('.cff-modal-close, #cff-close-modal-primary-button').on('click', function(){
|
206 |
$('.cff_modal_tokens').hide();
|
207 |
});
|
208 |
$('#cff_fb_show_tokens').on('click', function(){
|
209 |
+
$('.cff_modal_tokens, .cff-groups-list').show();
|
210 |
+
$('#cff-group-installation').hide();
|
211 |
});
|
212 |
|
213 |
//Select a page for token
|
214 |
$('.cff-managed-page').on('click', function(){
|
215 |
$('#cff-insert-token, .cff-insert-reviews-token, .cff-insert-both-tokens').removeAttr('disabled');
|
216 |
|
217 |
+
$('#cff_token_expiration_note').show();
|
218 |
+
|
219 |
$(this).siblings().removeClass('cff-page-selected');
|
220 |
$(this).addClass('cff-page-selected');
|
221 |
});
|
224 |
$('#cff-insert-token').on('click', function(){
|
225 |
$('#cff_access_token').val( $('.cff-page-selected').attr('data-token') ).addClass('cff-success');
|
226 |
if( $('#cff_page_id').val().trim() == '' ) $('#cff_page_id').val( $('.cff-page-selected').attr('data-page-id') );
|
227 |
+
|
228 |
+
if( $(this).hasClass('cff-group-btn') ){
|
229 |
+
$('.cff-groups-list').hide();
|
230 |
+
$('#cff-group-installation').show();
|
231 |
+
|
232 |
+
//Show directions for either group admin or member
|
233 |
+
if( $('.cff-page-selected').hasClass('cff-group-admin') ){
|
234 |
+
$('#cff-group-admin-directions').show();
|
235 |
+
$('#cff-group-member-directions').hide();
|
236 |
+
} else {
|
237 |
+
$('#cff-group-admin-directions').hide();
|
238 |
+
$('#cff-group-member-directions').show();
|
239 |
+
}
|
240 |
+
|
241 |
+
//Change page type to be group
|
242 |
+
$('#cff_page_type').val('group');
|
243 |
+
$('.cff-page-options').hide();
|
244 |
+
|
245 |
+
//Dynamically create group edit link
|
246 |
+
var cffGroupEditLink = 'https://facebook.com/groups/'+$('.cff-page-selected').attr('data-page-id')+'/edit';
|
247 |
+
$('#cff-group-installation #cff-group-edit').attr('href', cffGroupEditLink);
|
248 |
+
} else {
|
249 |
+
$('.cff_modal_tokens').hide();
|
250 |
+
}
|
251 |
|
252 |
location.hash = "cffnomodal";
|
253 |
});
|
257 |
$('.cff_modal_tokens').removeClass('cffnomodal');
|
258 |
}
|
259 |
|
260 |
+
//Switch Page/Group app button in modal
|
261 |
+
jQuery("#cff_login_type").change(function() {
|
262 |
+
if ( jQuery("#cff_login_type option:selected").val() == 'group' ) {
|
263 |
+
jQuery('#cff_page_app').hide();
|
264 |
+
jQuery('#cff_group_app').css('display', 'inline-block');
|
265 |
+
} else {
|
266 |
+
jQuery('#cff_page_app').css('display', 'inline-block');
|
267 |
+
jQuery('#cff_group_app').hide();
|
268 |
+
}
|
269 |
+
});
|
270 |
+
|
271 |
//Load the admin share widgets
|
272 |
$('#cff-admin-show-share-links').on('click', function(){
|
273 |
$(this).fadeOut();
|
278 |
}, 500);
|
279 |
});
|
280 |
|
281 |
+
//Group app setup screenshot
|
282 |
+
jQuery('#cff-group-app-tooltip').hover(function(){
|
283 |
+
jQuery('#cff-group-app-screenshot').fadeIn(100);
|
284 |
+
}, function(){
|
285 |
+
jQuery('#cff-group-app-screenshot').fadeOut(100);
|
286 |
+
});
|
287 |
+
|
288 |
+
//Remove any duplicate groups
|
289 |
+
jQuery('.cff-group-admin').each(function(){
|
290 |
+
jQuery('.cff-groups-list #' + jQuery(this).attr('id') ).eq(1).hide();
|
291 |
+
});
|
292 |
+
|
293 |
});
|