我把这个帖子标记为wordpress,但是我并不完全确定这是wordpress的特定的,所以我发布在StackOverflow而不是WPSE.该解决方案不一定是wordpress特定的,只是 PHP.

情景
我运行了一个fishkeeping website与一些热带鱼种类和词汇表条目.

我们的网站是围绕我们的个人资料.正如你所说,它们是网站的面包和黄油.

我希望实现的是,在提及另一个物种或词汇表条目的每个物种资料中,我可以用链接替换这些词,例如你会看到here.理想情况下,我也会这样发生在新闻,文章和博客帖子.

我们有近1400种物种资料和1700个词汇表.我们的物种资料通常很冗长,最后我们的物种资料总计超过170万字的信息.

我正在尝试什么
目前,我有一个filter.PHP的功能,我相信 – 做我需要做的.代码相当冗长,可以在here全部找到.

另外,在我的wordpress主题的functions.PHP中,我有以下内容:

# ==============================================================================================
# [Filter]
#
# Every hour,using WP_Cron,`my_updated_posts` is checked. If there are new Post IDs in there,# it will run a filter on all of the post's content. The filter will search for Glossary terms
# and scientific species names. If found,it will replace those names with links including a 
# pop-up.

    include "filter.PHP";

# ==============================================================================================
# When saving a post (new or edited),check to make sure it isn't a revision then add its ID
# to `my_updated_posts`.

    add_action( 'save_post','my_set_content_filter' );
    function my_set_content_filter( $post_id ) {
        if ( !wp_is_post_revision( $post_id ) ) {

            $post_type = get_post_type( $post_id );

            if ( $post_type == "species" || ( $post_type == "post" && in_category( "articles",$post_id ) ) || ( $post_type == "post" && in_category( "blogs",$post_id ) ) ) {
                //get the prevIoUs value
                $ids = get_option( 'my_updated_posts' );

                //add new value if necessary
                if( !in_array( $post_id,$ids ) ) {
                    $ids[] = $post_id;
                    update_option( 'my_updated_posts',$ids );
                }
            }
        }
    }

# ==============================================================================================
# Add the filter to WP_Cron.

    add_action( 'my_filter_posts_content','my_filter_content' );
    if( !wp_next_scheduled( 'my_filter_posts_content' ) ) {
        wp_schedule_event( time(),'hourly','my_filter_posts_content' );
    }

# ==============================================================================================
# Run the filter.

    function my_filter_content() {
        //check to see if posts need to be parsed
        if ( !get_option( 'my_updated_posts' ) )
            return false;

        //parse posts
        $ids = get_option( 'my_updated_posts' );

        update_option( 'error_check',$ids );

        foreach( $ids as $v ) {
            if ( get_post_status( $v ) == 'publish' )
                run_filter( $v );

            update_option( 'error_check',"filter has run at least once" );
        }

        //make sure no values have been added while loop was running
        $id_recheck = get_option( 'my_updated_posts' );
        my_close_out_filter( $ids,$id_recheck );

        //once all options,including any added during the running of what Could be a long cronjob are done,remove the value and close out
        delete_option( 'my_updated_posts' );
        update_option( 'error_check','working m8' );
        return true;
    }

# ==============================================================================================
# A "difference" function to make sure no new posts have been added to `my_updated_posts` whilst
# the potentially time-consuming filter was running.

    function my_close_out_filter( $beginning_array,$end_array ) {
        $diff = array_diff( $beginning_array,$end_array );
        if( !empty ( $diff ) ) {
            foreach( $diff as $v ) {
                run_filter( $v );
            }
        }
        my_close_out_filter( $end_array,get_option( 'my_updated_posts' ) );
    }

这个工作方式(希望)由代码的意见描述,是每个wordpress每小时运行一个cron工作(这就像一个假cron – 在用户点击上工作,但并不重要,因为时机不是重要的),它运行上面找到的过滤器.

每小时运行一次的理由是,如果我们在每个职位被保存时试图运行它,这将对作者造成不利影响.一旦我们收到客人的作者,这显然不是一个可以接受的方式.

问题…
几个月以来,我一直在使这个过滤器运行可靠的问题.我不认为问题在于过滤器本身,而是使用过滤器的功能之一,例如cron作业,或者选择过滤哪些帖子的功能,还是为单词列表等准备的功能过滤器.

不幸的是,诊断问题是非常困难的(我可以看到),感谢它在后台运行,只有在小时的基础上运行.我一直在尝试使用wordpress的update_option函数(它基本上写了一个简单的数据库值)进行错误检查,但我没有太多的运气 – 说实话,我很困惑的是,问题在哪里.

我们最终将网站存在,无需此过滤器正常工作.有时它似乎工作,有时它不.因此,我们现在有很多物种资料没有被正确过滤.

我想要什么
我基本上是寻求关于运行此过滤器的最佳方式的建议.

是Cron工作的答案吗?我可以设置每天运行的.PHP文件,这不会是一个问题.如何确定哪些职位需要过滤?它在运行时对服务器有什么影响?

或者,是wordpress管理页面的答案吗?如果我知道如何做到这一点,那么使用AJAX(允许我选择帖子来运行过滤器)的页面的一些东西将是完美的.有一个名为AJAX Regenerate Thumbnails的插件,这样做可能是最有效的?

注意事项

>受影响/读/写数据库/信息的大小
>哪些帖子被过滤
>过滤器对服务器的影响;特别是考虑到我似乎无法增加wordpress内存限制超过32Mb.
实际过滤器本身是否高效,有效可靠?

这是一个相当复杂的问题,我不可避免地(在过程中我被同事分心了大约18次),省略了一些细节.请随时查询我的进一步信息.

提前致谢,

创建配置文件时执行此操作.

尝试扭转整个过程.而不是检查内容的单词,检查内容的单词的单词.

>打破内容发表的内容(空格)
>删除重复的数据库中的一个单词的最小尺寸的数据库,一个最大的大小,一个在你的常用单词列表中.
>检查每个表格,如果您的某些表格包含带空格的短语,请执行%text%search,否则直接匹配(更快),甚至构建哈希表,如果它真的是一个大问题. (我会做一个PHP数组,并以某种方式缓存结果,没有意义重新发明的轮)
>使用现在更小的列表创建您的链接.

即使你搬出了十万个单词,你也可以轻松保持在1秒以内.我已经做了这个,没有缓存单词列表,以前的贝叶斯过滤器.

有了较小的列表,即使是贪婪而且收集不符合“小丑”的单词将会捕捉到“小丑泥ach”,所产生的较小的列表应该只有几到几十个字与链接.这将不需要时间去做一个文字的查找和替换.

以上并没有真正解决您对旧版配置文件的关注.你没有说出确实有多少,只是有很多的文本,它是在1400到3100(两个项目)放在一起.如果你有这个信息,你可以根据受欢迎程度来做这些较旧的内容.或输入的日期,最新的.不管最好的方法是编写一个脚本来暂停PHP的时间限制,只需批量运行所有帖子的加载/进程/保存.如果每个人需要大约1秒钟(可能要少得多,但最糟糕的情况),你说的是3100秒,这是一个小于一小时.

php – 如何创建一个有效的内容过滤器的某些帖子?的更多相关文章

  1. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  2. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  3. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  4. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

  5. iOS7 Safari中的全屏模式

    我正在使用SenchaTouch开发移动网站.在iOS7Safari中,我无法创建顶级地址栏和下面的工具栏消失了.Sencha过去常常处理iOS6,但iOS7最近的一些变化导致了这个问题.http://java.dzone.com/articles/safari-ios-7-and-html5我阅读了上面的链接&对于HTML5游戏而言,这似乎也是一个问题.一些其他应用程序.适用于iOS6的旧win

  6. ios – 如何使用新的Apple Swift语言发布JSON

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. ios – POST请求使用application / x-www-form-urlencoded

    后端开发人员在POST请求中给出了这些说明:>路线:{url}/{app_name/{controller}/{action}控制器和动作应该是小帽子.>API测试链接:http:****************>请求应该使用POST方法.>参数应通过请求内容体(FormUrlEncodedContent)传递.>参数应该是json格式.>参数是关键的.在协议中没有经验5,我搜索并结束了我的代码.

  8. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  9. ios – 在HTTPBody中设置NSDictionary并使用POST方法发送

    我想用POST方法调用Web服务.我需要发布一个带有URL的字典.我的Web服务参数如下:以下是我的要求:但是我收到以下错误:服务器拒绝此请求,因为请求实体的格式不受所请求方法所请求资源的支持解决方法请找到以下代码,将数据发布到Web服务.请注意这是我在我的一个申请中使用的样本.希望这可以帮助.从您的评论“服务器拒绝此请求”服务器是否支持JSON或XML格式.

  10. ios – 如何使用Firebase存储喜欢的内容

    我有一个关于firebase的后端,有像Facebook这样的帖子.所以我需要喜欢这些帖子的功能.问题是如何存储喜欢帖子的喜欢和用户?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部