web-dev-qa-db-ja.com

ポストスラッグにドット( "。")を追加する方法

ポストスラッグにドット(.)を追加するにはどうすればいいですか?

私たちのブログでは、私たちはウェブサイトについて書いているので、このようにスラグとして正確な住所を使用したいと思います。

ourdomain.com/example1.com

しかし、投稿が保存されたときにドットが削除されるか、または正しく追加されたときにはWordPressがその投稿を見つけられません。

利用可能なオプションはありますか?

2
bhv

WordPressはドットをダッシュ​​に置き換えるsanitize_title_with_dashes()フィルタ関数を通してスラッグを実行します。残念なことに、この関数はあなたにそれを制御することも、どんな文字が取り除かれたり置き換えられるのかを変更することもできません。

しかし、私たちができることは、そのフィルターを削除し、いくつかの変更を加えて、私たち自身のバージョンのフィルターを追加することです。

remove_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10 );
add_filter( 'sanitize_title', 'wpse231448_sanitize_title_with_dashes', 10, 3 );

function wpse231448_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, 200);
    }

    $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( ' ', ' ', '–', '–', '—', '—' ), '-', $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

    // WPSE-231448: Commented out this line below to stop dots being replaced by dashes.
    //$title = str_replace('.', '-', $title);

    // WPSE-231448: Add the dot to the list of characters NOT to be stripped.
    $title = preg_replace('/[^%a-z0-9 _\-\.]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}

私が編集した行は "WPSE-231448"でコメントアウトされています - 最初にstr_replace()を実行してドットをダッシュ​​で置き換えた行をコメントアウトし、それからその下のpreg_replace()関数で置き換えられないようにドットを追加します。 。

私はこれをページネーションなどでテストしていないことに注意してください。フロント/バックエンドのスラグからドットが取り除かれるのを止めるだけであり、それから生じる可能性のある問題はそれに応じて処理する必要があります。

2
Andy