通过一些努力和大量阅读,facebook共享问题的解决方案是使用wordpress重写选项,而不是wordpress端点。
端点是单个wordpress页面上的固定附加选项。没有扩张的空间。
我的网站需要一个基于短代码的WordPress页面。这一页有可能显示数千种不同的内容组合。url参数是索引。但facebook不喜欢索引或参数,并在facebook开发者指南中指出这一点。
但是,您可以通过将WordPress重写规则更改为类似URL的内容来欺骗Facebook。页面实际上并不存在,而是URL现在包含相同的参数,但形式不同。
最初页面的操作如下:
domain.com/yourpage?option1=X&option2=Y
这是Facebook现在拒绝的格式,导致共享页面出现缺失。
通过将参数转换为标准URL的一部分,例如:
domain.com/yourpage/X/Y
该URL被Facebook按原样接受。
经典规则重写规则建议使用来修改内容。
add_filter( \'the_content\', \'YourFunction\' );
这样做的问题是:只有一个参数可以与一段数据关联,而短代码需要同时使用所有参数。除非您想使用全局变量并冒着不同用户之间竞争条件的风险,否则这是不实用的或内容不可靠的。
因此,我的解决方案是重写WordPress中的规则,仅针对这一特定页面,然后在加载页面并点击短代码时,“读取”URL并将其解析出来,以便检索所需的变量。这个解决方案的美妙之处在于,您可以添加任意多的变量。没有限制。
上一个URL是:
domain.com/yourpage?option1=X&option2=Y
我们现在希望url如下所示
domain.com/yourpage/X/Y
解决方案:
add_action( \'init\', \'wpd_detailspage_rewrite\' );
function wpd_detailspage_rewrite()
{
add_rewrite_tag(
\'%option1%\',
\'([^/]+)\'
);
add_rewrite_tag(
\'%option1%\',
\'([^/]+)\'
);
$pattern = \'^yourpage/([^/]+)/?\';
$ppagepattern = \'index.php?pagename=yourpage&option1=$matches[1]&option2=$matches[2]\';
add_rewrite_rule( $pattern, $ppagepattern, \'top\' );
}
然后添加此函数,告诉WordPress您要查找的参数变量:
add_filter( \'query_vars\', \'DetailsParametersVariables\' );
function DetailsParametersVariables( $vars )
{
$vars[] = \'option1\';
$vars[] = \'option2\';
return $vars;
}
使用您的内容短代码,然后解析URL。
add_shortcode(\'PAGE_CONTENT\', \'GenerateContent\');
function GenerateContent($atts)
{
$base_url = ( isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\']==\'on\' ? \'https\' : \'http\' ) . \'://\' . $_SERVER[\'HTTP_HOST\'];
$current_url = $base_url . $_SERVER["REQUEST_URI"];
$ClearUrl = explode(\'?\', $current_url); // Clear any content attempts
$ParametersShown = str_replace($url,"",$ClearUrl[0]);
$BrokenUp = explode(\'/\', (string)$ParametersShown);
$Option1 = sanitize_text_field(stripslashes($BrokenUp[0]));
$Option2 = sanitize_text_field(stripslashes($BrokenUp[1]));
if(!is_numeric ($Option1 ) || !is_numeric ($Option2 ))
{
// GO TO MISSING PAGE. PAGE IS NOT VALID.
header(\'Location: /missing-page/\');
return 0;
}
.....READ DATABASE AND FORMAT CONTENT
}
有人可能会说,使用$\\u服务器调用是不安全的。但在这种情况下,我们正在解析和分析任何内容,就像一堵伪防火墙,这样风险就消失了,潜在的风险也就消除了。
最后一个REQUIRED 步骤是刷新重写规则。除非这一点到位,否则一切都不起作用。这可以通过一次进入永久链接并重新保存来完成。还有其他解决方案,但除非你出售插件,否则对于自定义站点来说,没有刷新开销似乎更实用。如果我想出一种更好的程序化刷新方法,将在稍后更新。
您将不会在中看到任何更改。htaccess。此规则保存在Wordpress数据库中。保存会导致更改保存在那里。
URL为:
domain.com/yourpage/X/Y
Facebook现在接受该链接,并可以点击生成的页面。
我把这段代码直接放进我的插件,插件会生成网站的所有内容。但很可能是它自己的独立插件。