【问题标题】:Programmatically control Wordpress' Search Engine Visibility以编程方式控制 Wordpress 的搜索引擎可见性
【发布时间】:2013-11-22 17:45:18
【问题描述】:

我正在编写一个简单的脚本和插件来将“暂存”Wordpress 网站移至生产网站。方法很简单:mysql转储,将所有内容检查到源代码管理中,调整数据库名称,在生产中恢复。

我遇到的一个问题是我无法弄清楚如何在设置 > 阅读下切换搜索引擎可见性设置。我希望搜索引擎忽略暂存,但不要在生产中覆盖该设置(恢复后)。

关于如何做到这一点的任何想法?快速而肮脏(在 sql 转储文件上使用 sed / find & replace 等)对我来说很好。

谢谢

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    Wordpress 搜索引擎可见性状态存储在表选项中,选项名称为 'blog_public',如果站点被搜索引擎可见,则值为 '1',如果站点不被搜索引擎可见,则值为 '0'

    所以,也许你可以使用 wordpress 函数中的 update_option 来切换它,

    update_option('blog_public', '1');
    

    或者直接在数据库中替换它

    【讨论】:

      【解决方案2】:

      我根本不会为此使用 Wordpress 网站可见性设置。

      我建议使用部分/所有这些:

      1. 在您的临时站点上使用 robots.txt(请记住不要复制到现场)
         User-agent: *
         Disallow: /
      

      (但你必须相信搜索引擎会尊重它,就像你做 Wordpress 设置一样)

      1. 使用 .htaccess.htpasswd 之类的密码保护临时站点(假设您使用 Apache 服务器)。

      2. 使用 .htaccess 来限制从任何 IP 地址以外的任何地址访问您的临时站点。

      这样您只需进行一次更改,就无需在每次进行实时同步时对数据库执行危险的 sed 操作。

      【讨论】:

      • 为什么不使用 WordPress 网站可见性设置?那有什么用呢?
      • 因为在 OP 的问题中,他会经常将数据库复制到实时实例,并且不想继续覆盖可见性设置。
      • 您可能会对用例做出不一定准确的假设。他们正在编写一个脚本,根据检测到的服务器自动进行设置是完全有意义的;如果复制数据库,该脚本将变得无关紧要 - 大概他们也在复制文件系统,因此引入更复杂的管理 robots.txt 文件并不能解决任何同步问题(只有可以检测服务器的脚本才会这样做这个)。
      • 当然。每次 rsync 站点时执行自动数据库操作。或者对 robots.txt 文件执行一次 git ignore。给猫剥皮的方法不止一种。
      【解决方案3】:

      TL;DR

      简单的解决方案

      #!/bin/bash
      
      # WordPress > Settings > Reading > Search Engine Visibility
      # 0 - discourages search engines from indexing the site (private)
      # 1 - encourages search engines from indexing the site (public)
      wp_production_blog_public="1"
      
      BLOG_PRIVATE="'blog_public','0'"
      BLOG_PUBLIC="'blog_public','1'"
      BLOG_PUBLICITY_VALUE="'blog_public','$wp_production_blog_public'"
      
      # Use sed to execute search-and-replace
      # These lines ensure the production site will follow the value of
      # the `wp_production_blog_public` even if the staging site is either private or public
      sed "s#$BLOG_PRIVATE#$BLOG_PUBLICITY_VALUE#g" "database.staging.sql" > "database.pre-production.sql"
      sed "s#$BLOG_PUBLIC#$BLOG_PUBLICITY_VALUE#g" "database.pre-production.sql" > "database.production.sql"
      

      加长版

      我正在构建一个与您类似的项目。使用上述脚本,您可以生成一个新的生产数据库,您可以在其中设置 Wordpress 搜索引擎可见性的值。

      输入

      您只需要mysqldump 生成的转储文件或phpMyAdmin 的备份文件

      database.staging.sql
      

      输出

      运行脚本后,您将能够拥有一个已被搜索和替换的数据库。

      database.production.sql
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 2013-01-19
        • 2018-01-31
        • 2011-03-31
        • 2021-12-04
        相关资源
        最近更新 更多