my posts are saved as drafts

时间:2016-09-02 作者:Messi Adrinho

我最近在中添加了此函数this post 要将我的帖子标题字符限制从200增加到自定义长度,现在的问题是,当我单击“发布”时,帖子将保存为草稿,我无法发布,因为我只有2个选择

待审核草稿以下是我添加到功能文件中的功能:

<?php

     remove_filter( \'sanitize_title\', \'sanitize_title_with_dashes\' );

        // add our custom hook 
    add_filter( \'sanitize_title\', \'wpse8170_sanitize_title_with_dashes\', 10, 3 );
    function wpse8170_sanitize_title_with_dashes( $title, $raw_title = \'\', $context = \'display\' ) {
        $title = strip_tags($title);
        // Preserve escaped octets.
        $title = preg_replace(\'|%([a-fA-F0-9][a-fA-F0-9])|\', \'---$1---\', $title);
        // Remove percent signs that are not part of an octet.
        $title = str_replace(\'%\', \'\', $title);
        // Restore octets.
        $title = preg_replace(\'|---([a-fA-F0-9][a-fA-F0-9])---|\', \'%$1\', $title);

        if (seems_utf8($title)) {
            if (function_exists(\'mb_strtolower\')) {
                $title = mb_strtolower($title, \'UTF-8\');
            }
            $title = utf8_uri_encode($title, 1000); // <--- here is the trick!
        }

        $title = strtolower($title);
        $title = preg_replace(\'/&.+?;/\', \'\', $title); // kill entities
        $title = str_replace(\'.\', \'-\', $title);

        if ( \'save\' == $context ) {
            // Convert nbsp, ndash and mdash to hyphens
            $title = str_replace( array( \'%c2%a0\', \'%e2%80%93\', \'%e2%80%94\' ), \'-\', $title );

                // Strip these characters entirely
                $title = str_replace( array(
                // iexcl and iquest
                \'%c2%a1\', \'%c2%bf\',
                // angle quotes
                \'%c2%ab\', \'%c2%bb\', \'%e2%80%b9\', \'%e2%80%ba\',
                // curly quotes
                \'%e2%80%98\', \'%e2%80%99\', \'%e2%80%9c\', \'%e2%80%9d\',
                \'%e2%80%9a\', \'%e2%80%9b\', \'%e2%80%9e\', \'%e2%80%9f\',
                // copy, reg, deg, hellip and trade
                \'%c2%a9\', \'%c2%ae\', \'%c2%b0\', \'%e2%80%a6\', \'%e2%84%a2\',
                // grave accent, acute accent, macron, caron
                \'%cc%80\', \'%cc%81\', \'%cc%84\', \'%cc%8c\',
            ), \'\', $title );

            // Convert times to x
            $title = str_replace( \'%c3%97\', \'x\', $title );
        }

        $title = preg_replace(\'/[^%a-z0-9 _-]/\', \'\', $title);
        $title = preg_replace(\'/\\s+/\', \'-\', $title);
        $title = preg_replace(\'|-+|\', \'-\', $title);
        $title = trim($title, \'-\');

        return $title;
    } ?>

2 个回复
SO网友:iyrin

您只需复制当前函数sanitize_title_with_dashes 从…起https://core.trac.wordpress.org/browser/tags/4.6/src/wp-includes/formatting.php#L1948 并更改以下行:

$title = utf8_uri_encode($title, 200);
对此:

$title = utf8_uri_encode($title, 1000);

Minor edit: Always refer to the source for the same version of WordPress you have installed. In most cases, it should be the current version.

您使用的脚本与当前函数的格式不匹配。php(compare differences here). 特别是,以下两行出现在if ( \'save\' == $context ) 在原始功能中触发条件:

$title = preg_replace(\'/&.+?;/\', \'\', $title); // kill entities
$title = str_replace(\'.\', \'-\', $title);
下面的示例与sanitize_title_with_dashes 重命名为新函数wpse8170_sanitize_title_with_dashes. 只有中的值utf8_uri_encode() 已更改:

function wpse8170_sanitize_title_with_dashes( $title, $raw_title = \'\', $context = \'display\' ) {
    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace(\'|%([a-fA-F0-9][a-fA-F0-9])|\', \'---$1---\', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace(\'%\', \'\', $title);
    // Restore octets.
    $title = preg_replace(\'|---([a-fA-F0-9][a-fA-F0-9])---|\', \'%$1\', $title);
    if (seems_utf8($title)) {
        if (function_exists(\'mb_strtolower\')) {
                $title = mb_strtolower($title, \'UTF-8\');
        }
        $title = utf8_uri_encode($title, 1000);
    }
    $title = strtolower($title);
    if ( \'save\' == $context ) {
        // Convert nbsp, ndash and mdash to hyphens
        $title = str_replace( array( \'%c2%a0\', \'%e2%80%93\', \'%e2%80%94\' ), \'-\', $title );
        // Convert nbsp, ndash and mdash HTML entities to hyphens
        $title = str_replace( array( \'&nbsp;\', \'&#160;\', \'&ndash;\', \'&#8211;\', \'&mdash;\', \'&#8212;\' ), \'-\', $title );
        // Strip these characters entirely
        $title = str_replace( array(
            // iexcl and iquest
            \'%c2%a1\', \'%c2%bf\',
            // angle quotes
            \'%c2%ab\', \'%c2%bb\', \'%e2%80%b9\', \'%e2%80%ba\',
            // curly quotes
            \'%e2%80%98\', \'%e2%80%99\', \'%e2%80%9c\', \'%e2%80%9d\',
            \'%e2%80%9a\', \'%e2%80%9b\', \'%e2%80%9e\', \'%e2%80%9f\',
            // copy, reg, deg, hellip and trade
            \'%c2%a9\', \'%c2%ae\', \'%c2%b0\', \'%e2%80%a6\', \'%e2%84%a2\',
            // acute accents
            \'%c2%b4\', \'%cb%8a\', \'%cc%81\', \'%cd%81\',
            // grave accent, macron, caron
            \'%cc%80\', \'%cc%84\', \'%cc%8c\',
        ), \'\', $title );
        // Convert times to x
        $title = str_replace( \'%c3%97\', \'x\', $title );
    }
    $title = preg_replace(\'/&.+?;/\', \'\', $title); // kill entities
    $title = str_replace(\'.\', \'-\', $title);
    $title = preg_replace(\'/[^%a-z0-9 _-]/\', \'\', $title);
    $title = preg_replace(\'/\\s+/\', \'-\', $title);
    $title = preg_replace(\'|-+|\', \'-\', $title);
    $title = trim($title, \'-\');
    return $title;
}

SO网友:Messi Adrinho

我已经修复了它,问题是posts表中的post_name列设置为varchar(200),所以我将其更改为LONGTEXT,因为当它设置为postname时,permalink总是从那里获取post_name,我只是将其添加到我的函数文件中,然后停用,然后激活我的函数

function change_tab_length() {
     global $wpdb;
    $table_name = $wpdb->prefix. "posts";
    global $charset_collate;
    $charset_collate = $wpdb->get_charset_collate();
    global $db_version;

    $wpdb->get_var("alter table ".$table_name." change post_name post_name LONGTEXT CHARACTER SET utf8");
}
add_action( \'init\', \'change_tab_length\');