根据替换数组修复常见的拼写错误/错误

时间:2019-08-26 作者:warm__tape

我正在尝试设置一个函数来修复网站上常见的内容错误。我想获取一个post字段数组$check_fields 并在一个名为$replacement_terms.

到目前为止,我有以下几点:

$check_fields = array(
    "post_title",
    "post_content"
);

$replacement_terms = array(
    "™™,™",
    "®®,®",
    "  , "
);

foreach ( $check_fields as $field ) {

    foreach ( $replacement_terms as $term ) {

        $replacement = explode( ",", $field )

        $fixed_content = str_replace( $replacement["0"], $replacement["1"], $field);

        update_post_meta( $post_id, $field, $fixed_content );

    }

}
有什么建议可以让它正常工作/稍微优化一下吗?

2 个回复
SO网友:STBox

尝试理解以下链接上的示例,很可能会有所帮助:https://www.sitepoint.com/find-correct-misspelled-words-pspell/

SO网友:Greg Winiarski

可以进行的一个优化是使用数组作为str\\u replace“find”和“replace”参数,这样可以避免在循环中出现循环。

除此之外,您似乎正在尝试将post\\u标题和post\\u内容保存在post meta中,但这些数据不是存储在post meta中,而是存储在post本身中。

修复拼写错误的函数可能如下所示

function fix_spelling_errors( $post_id ) {
    global $wpdb;

    $check_fields = array(
        "post_title",
        "post_content"
    );

    $replacement_terms = array(
        "™™,™",
        "®®,®",
        "  , "
    );

    $terms_find = array();
    $terms_repl = array();

    foreach( $replacement_terms as $terms ) {
        $term = explode( ",", $terms );
        $terms_find[] = trim( $term[0] );
        $terms_repl[] = trim( $term[1] );
    }

    $post = get_post( $post_id );

    foreach( $check_fields as $field ) {

        if( isset( $post->$field ) ) {
            $fixed = str_replace( $terms_find, $terms_repl, $post->$field );
            $sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}posts SET `{$field}` = %s WHERE ID = %d", $fixed, $post_id );
            $wpdb->query( $sql );

        } else {
            $to_fix = get_post_meta( $post_id, $field, true );
            $fixed = str_replace( $terms_find, $term_repl, $to_fix );
            update_post_meta( $post_id, $field, $fixed );
        }
    }

} );
那么你可以用它作为

fix_spelling_errors( 100 );
其中,100是要修复拼写错误的帖子的ID。

您没有提到您想在何处使用此功能如果您想在从wp admin panel保存帖子时执行此功能,那么您可以使用如下save\\u post操作将其删除

add_action( "save_post", "fix_spelling_errors" );
尽管请注意,如果使用Gutenberg,虽然拼写错误将在数据库中修复,但在编辑帖子时,非固定文本将显示在wp admin/Posts中(您需要刷新页面以显示固定文本)。

相关推荐

使用index.php而不是single.php发布WP帖子

关于我的自定义主题的帖子正在使用index.php 文件而不是single.php _ 我已经看完了至少10个关于SO的问题,尽管其中许多问题都很老了\\u一些回答说,如果WP循环未在中设置single.php 那么它就不会被称为“我的单身”。php文件确实包含循环_<?php get_header(); ?> <div class=\"container fadeIn\" id=\"perimeter\"> <sectio