Has Facebook sharer.php changed to no longer accept detailed parameters?
We have been opening a sharing popup (via window.open) with the URL like
https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE
and until some unknown point in the last month or so everything was fine.
What is happening now is; the popup dialog appears and correctly includes the Title, Description, Image and URL provided by the query string parameters, but when the post is submitted, the resulting wall post on Facebook is missing the Title, Description and Image, though it still links to the correct URL.
Does anyone know if there have been recent changes which could have suddenly stopped this from working?
Pre-empting some common responses:
"sharer.php URL was deprecated" - usage seemed to continue and it seemed the consensus was that it was largely considered to be sticking around - I haven't seen any specific indication that it should have suddenly ceased working - might have missed something
"Use JavaScript SDK/these OG meta tags" - not possible in my specific situation - just trust me ... I can explain if you REALLY want but it's really not relevant.
"Use the feed dialog" - not suitable due to lack of support for posting with attachments on FB pages
Solution 1:
Facebook no longer supports custom parameters in sharer.php
The sharer will no longer accept custom parameters and facebook will pull the information that is being displayed in the preview the same way that it would appear on facebook as a post from the url OG meta tags.
Use dialog/feeds instead of sharer.php
https://www.facebook.com/dialog/feed?
app_id=145634995501895
&display=popup&caption=An%20example%20caption
&link=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fdialogs%2F
&redirect_uri=https://developers.facebook.com/tools/explorer
Official answer from fb team
Solution 2:
Starting from July 18, 2017 Facebook has decided to disregard custom parameters set by users. This choice blocks many of the possibilities offered by this answer and it also breaks buttons used on several websites.
The quote
and hashtag
parameters work as of Dec 2018.
Does anyone know if there have been recent changes which could have suddenly stopped this from working?
The parameters have changed. The currently accepted answer states:
Facebook no longer supports custom parameters in
sharer.php
But this is not entirely correct. Well, maybe they do not support or endorse them, but custom parameters can be used if you know the correct names. These include:
- URL (of course) →
u
- custom image →
picture
- custom title →
title
- custom quote →
quote
- custom description →
description
- caption (aka website name) →
caption
For instance, you can share this very question with the following URL:
https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fstackoverflow.com%2Fq%2F20956229%2F1101509&picture=http%3A%2F%2Fwww.applezein.net%2Fwordpress%2Fwp-content%2Fuploads%2F2015%2F03%2Ffacebook-logo.jpg&title=A+nice+question+about+Facebook"e=Does+anyone+know+if+there+have+been+recent+changes+which+could+have+suddenly+stopped+this+from+working%3F&description=Apparently%2C+the+accepted+answer+is+not+correct.
Try it!
I've built a tool which makes it easier to share URLs on Facebook with custom parameters. You can use it to generate your sharer.php
link, just press the button and copy the URL from the tab that opens.
Solution 3:
Your problem is caused by the lack of markers OpenGraph, as you say it is not possible that you implement for some reason.
For you, the only solution is to use the PHP Facebook API.
- First you must create the application in your facebook account.
-
When creating the application you will have two key data for your code:
YOUR_APP_ID YOUR_APP_SECRET
Download the Facebook PHP SDK from here.
-
You can start with this code for share content from your site:
<?php // Remember to copy files from the SDK's src/ directory to a // directory in your application on the server, such as php-sdk/ require_once('php-sdk/facebook.php'); $config = array( 'appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', 'allowSignedRequest' => false // optional but should be set to false for non-canvas apps ); $facebook = new Facebook($config); $user_id = $facebook->getUser(); ?> <html> <head></head> <body> <?php if($user_id) { // We have a user ID, so probably a logged in user. // If not, we'll get an exception, which we handle below. try { $ret_obj = $facebook->api('/me/feed', 'POST', array( 'link' => 'www.example.com', 'message' => 'Posting with the PHP SDK!' )); echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>'; // Give the user a logout link echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>'; } catch(FacebookApiException $e) { // If the user is logged out, you can have a // user ID even though the access token is invalid. // In this case, we'll get an exception, so we'll // just ask the user to login again here. $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' )); echo 'Please <a href="' . $login_url . '">login.</a>'; error_log($e->getType()); error_log($e->getMessage()); } } else { // No user, so print a link for the user to login // To post to a user's wall, we need publish_stream permission // We'll use the current URL as the redirect_uri, so we don't // need to specify it here. $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) ); echo 'Please <a href="' . $login_url . '">login.</a>'; } ?> </body> </html>
You can find more examples in the Facebook Developers site:
https://developers.facebook.com/docs/reference/php
Solution 4:
I review your url in use:
https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE
and see this differences:
- The sharer URL not is same.
- The strings are in different order. ( Do not know if this affects ).
I use this URL string:
http://www.facebook.com/sharer.php?s=100&p[url]=http://www.example.com/&p[images][0]=/images/image.jpg&p[title]=Title&p[summary]=Summary
In the "title" and "summary" section, I use the php function urlencode();
like this:
<?php echo urlencode($detail->title); ?>
And working fine for me.