web-dev-qa-db-ja.com

WordPress urlからカテゴリとタグベースを削除-プラグインなし

WordPress URLからカテゴリとタグベースを削除します。プラグインを使用した他の投稿やソリューションに出くわしました。私はプラグインから離れて、functions.php内から解決策を持ちたいです。これにより、将来のプラグインの更新またはWordPressデフォルトファイルの変更が防止されます。

任意の助けをいただければ幸いです。ありがとう!

私はこれまでにこれらのソリューションを試しました:

44
cosmoonot

私はこのソリューションが好きでした:

/category/をURLから削除する場合は、次の2つの手順を実行します。

  1. [設定] >> [パーマリンク]に移動し、[カスタム]を選択して/%category%/%postname%/を入力します
  2. 次に、カテゴリベースを.に設定します

保存すると、URLがhttp:/yourblog.com/quotes/の形式に変更されます。

(ソース: http://premium.wpmudev.org/blog/daily-tip-quick-trick-to-remove-category-from-wordpress-url/

55
optimiertes

解決策として却下する一方で、プラグインは断然最も簡単で一貫性のある方法であり、WordPressデフォルトファイルを変更しません。

http://wordpress.org/plugins/wp-no-category-base/

1年間更新する必要はありませんでしたので、更新で正確に問題が生じるわけではありません。

プラグインが独自のfunctions.php内から行うことを単に複製するだけではなく、これをすべて行う単純な手作業による解決策はありません。

  • Myblog.com/my-category/やmyblog.com/my-category/my-post/などのより良い論理パーマリンク。
  • シンプルなプラグイン-オーバーヘッドはほとんど追加されません。
  • すぐに使用できます-セットアップは不要です。 WordPressファイルを変更する必要はありません。
  • 動作するために他のプラグインを必要としません。
  • サイトマッププラグインと互換性があります。
  • 複数のサブカテゴリで動作します。
  • WordPressマルチサイトで動作します。
  • 古いカテゴリのパーマリンクを新しいものにリダイレクトします(301リダイレクト、SEOに適しています)。

さらに、WordPressが変更された場合、プラグインが動作するように更新される一方で、独自のコードを修正する方法を理解する必要があるという利点があります。

17
Anigel
  1. カスタム構造の設定:/%postname%/
  2. カテゴリベースの設定:。 (ドットではない/)

  3. セーブ。 100%が正しく機能します。

17
user4414801

Yoast SEOプラグインを使用する場合は、次の場所に移動します。

Search Appearance > Taxonomies > Category URLs.

Strip the category base (usually /category/) from the category URLからremoveを選択します。

タグの削除に関しては、まだ解決策が見つかりませんでした。

14
paulalexandru

代わりに、functions.phpにこれを入れると正常に動作し、リダイレクトの問題はありません。

function fix_slash( $string, $type )
{
global $wp_rewrite;
if ( $wp_rewrite->use_trailing_slashes == false )
{
    if ( $type != 'single' && $type != 'category' )
        return trailingslashit( $string );

    if ( $type == 'single' && ( strpos( $string, '.html/' ) !== false ) )
        return trailingslashit( $string );

    if ( $type == 'category' && ( strpos( $string, 'category' ) !== false ) )
    {
        $aa_g = str_replace( "/category/", "/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

add_filter( 'user_trailingslashit', 'fix_slash', 55, 2 );
4
Robbert

カテゴリ以外のプラグインは機能しませんでした。

マルチサイトWordPressの場合、次のように機能します。

  1. ネットワーク管理サイトにアクセスしてください。
  2. \でサイトを開く;
  3. 設定に移動;
  4. パーマリンク構造の下に/%category%/%postname%/と入力します。これにより、URLがwww.domainname.com/categoryname/postnameとして表示されます。
  5. 次に、ネットワークダッシュボードではなくサイトダッシュボードに移動します。
  6. 設定を開きます。
  7. パーマリンクを開きます。保存しないでください(パーマリンクは編集不可能なフィールドをyourdoamainname/blog/として表示します。無視します。今保存すると、ステップ4で行った作業は上書きされます。 。
2
Goutham

ドットトリックは、おそらくrssフィードやページネーションを台無しにします。ただし、これらは機能します。

add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules($category_rewrite) {
    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        if ( $category->parent == $category->cat_ID )
            $category->parent = 0;
        elseif ($category->parent != 0 )
            $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
        $category_rewrite['('.$category_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $category_rewrite['('.$category_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $category_rewrite['('.$category_nicename.')/?$'] = 'index.php?category_name=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';
    return $category_rewrite;
}

// remove tag base
add_filter('tag_rewrite_rules', 'no_tag_base_rewrite_rules');
function no_tag_base_rewrite_rules($tag_rewrite) {
    $tag_rewrite=array();
    $tags=get_tags(array('hide_empty'=>false));
    foreach($tags as $tag) {
        $tag_nicename = $tag->slug;
        if ( $tag->parent == $tag->tag_ID )
            $tag->parent = 0;
        elseif ($tag->parent != 0 )
            $tag_nicename = get_tag_parents( $tag->parent, false, '/', true ) . $tag_nicename;
        $tag_rewrite['('.$tag_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?tag=$matches[1]&feed=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&paged=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/?$'] = 'index.php?tag=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_tag_permastruct();
    $old_base = str_replace( '%tag%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $tag_rewrite[$old_base.'$'] = 'index.php?tag_redirect=$matches[1]';
    return $tag_rewrite;
}

// remove author base
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;    
    $author_rewrite = array();    
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?author_name=$matches[1]&feed=$matches[2]';
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }      
    return $author_rewrite;}
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}
2

組み合わせ(URLベースのタグ、カテゴリ、ページ)をまだ検索している場合は、私と同じように実行できます。

Wordpress 3.9.1を使用してテスト済み

同じ名前のページ、カテゴリ、またはタグがある場合、システムは次のことを行います。

  1. 鬼ごっこ
  2. ページ
  3. カテゴリー
2
SimonSimCity

パーマリンクでカスタム構造を選択し、ドメインの後に/%category%/%postname%/を追加します。カテゴリベースに「/」を追加しても機能しません。ピリオド/ドットを追加する必要があります。このためのチュートリアルをここに書きました: RLチュートリアルからカテゴリを削除

1
Jonny Jordan
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
    unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
0
fdrv

WordPress 5.0.2:

既存の投稿からカテゴリスラッグを削除するには、次を実行します:

  1. [設定]> [パーマリンク]に移動し、カスタム構造を/%category%/%postname%/から/%postname%/に変更します
  2. カテゴリとタグのベースを空のままにします(これもデフォルトです)
  3. セーブ

すべての投稿にdomain.com/%postname%/から直接アクセスできるようになり、すべてのカテゴリにdomain.com/category/xyz/からアクセスできるようになりました。 WordPressは、古いURLのすべての301リダイレクトを自動的に追加します。したがって、誰かがdomain.com/%category%/%postname%/にアクセスすると、自動的にdomain.com/%postname%/にリダイレクトされます。

0
Nadeem Khan

コードを使用してそれを行う方法はわかりませんが、プラグインを使用してもかまいません。これは私のために働く素晴らしいものです:

https://es.wordpress.org/plugins/permalink-manager/

0
Jmainol

更新された回答:

他の解決策:
wp-includes/rewrite.phpファイルには、次のコードが表示されます。
$this->category_structure = $this->front . 'category/';関数全体をコピーし、functions.phpに入れてフックします。上記の行を次のように変更するだけです:
$this->category_structure = $this->front . '/';

0
T.Todua

https://wordpress.org/plugins/remove-category-url/ このプラグインを使用すると、category-baseを完全に隠すことができます。インストールするだけで設定を行う必要はありません。

0
Girish