使用url参数解决Facebook共享问题的虚拟页面

时间:2019-11-10 作者:Debbie Kurth

伸出援手,因为我的头在旋转!在我的网站中,我能够动态生成页面,并使用URL参数指示数据库和记录,以用于检索用于显示、艺术品等的信息。

使用这些参数的页面是单个页面,但根据使用的记录,可能会显示数千个不同的版本。

目前的布局是:域。com/详细信息/?ls=00A和;ls2=00B

但Facebook并没有参与分享这样一个定义明确的页面。因此,我需要将其转换为一个更符合此布局的虚拟页面:

 domain.com/details/00A-00B/
 Where parameter 1 is 00A and parameter 2 is 00B
我相信这与更改重写规则或创建端点有关,但由于称为“细节”的页面扩展的数量可能有数千个,这似乎无法满足动态生成页面和自我维护的需要。

有人会建议如何实现扩展的通配符效果:

      domain.com/details/*
这似乎与这篇文章相似:Passing & Reading URL Parameters with URL re-writing

然而,这篇文章和其他类似的文章更倾向于“固定”扩展,我正在寻找一个通配符扩展,可以通过详细信息页面上的自定义代码(通过短代码)读取。

其他职位,如:Facebook sharer and parameters in URL 没有给出可行的答案。

在facebook上,我已经通过Javascript修改了所有开放图元标记,并确认了其存在。这只是一个使用参数作为定义的虚拟页面的问题。

需要一些帮助。

更新:这是最新的,仍然无法正常工作。请求帮助:

 add_action( \'init\', \'DetailsEndPointRules\' );
 function DetailsEndPointRules( )
    {
    add_rewrite_tag("%ls%", \'(\\d+)\');                    //database record 
    add_rewrite_tag("%lid%", \'(\\d+)\');                   //List Id
    $tag   = \'^details/(.+)/?$\';    
    $regex = \'index.php?pagename=details&ls=$matches[1]&lid=$matches[2]\';
    add_rewrite_rule($tag,$regex,\'top\');
    }

   // add the url parameters to the query variable list  
   add_filter( \'query_vars\', \'DetailsParametersVariables\' );
   function DetailsParametersVariables( $vars )
    {
    $vars[] = \'ls\';
    $vars[] = \'lid\';
    return $vars;
    }

1 个回复
最合适的回答,由SO网友:Debbie Kurth 整理而成

通过一些努力和大量阅读,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现在接受该链接,并可以点击生成的页面。

我把这段代码直接放进我的插件,插件会生成网站的所有内容。但很可能是它自己的独立插件。