WordPress URLからカテゴリとタグベースを削除します。プラグインを使用した他の投稿やソリューションに出くわしました。私はプラグインから離れて、functions.php内から解決策を持ちたいです。これにより、将来のプラグインの更新またはWordPressデフォルトファイルの変更が防止されます。
任意の助けをいただければ幸いです。ありがとう!
私はこれまでにこれらのソリューションを試しました:
私はこのソリューションが好きでした:
/category/
をURLから削除する場合は、次の2つの手順を実行します。
/%category%/%postname%/
を入力します.
に設定します保存すると、URLがhttp:/yourblog.com/quotes/の形式に変更されます。
(ソース: http://premium.wpmudev.org/blog/daily-tip-quick-trick-to-remove-category-from-wordpress-url/ )
解決策として却下する一方で、プラグインは断然最も簡単で一貫性のある方法であり、WordPressデフォルトファイルを変更しません。
http://wordpress.org/plugins/wp-no-category-base/
1年間更新する必要はありませんでしたので、更新で正確に問題が生じるわけではありません。
プラグインが独自のfunctions.php内から行うことを単に複製するだけではなく、これをすべて行う単純な手作業による解決策はありません。
さらに、WordPressが変更された場合、プラグインが動作するように更新される一方で、独自のコードを修正する方法を理解する必要があるという利点があります。
カテゴリベースの設定:。 (ドットではない/)
セーブ。 100%が正しく機能します。
Yoast SEO
プラグインを使用する場合は、次の場所に移動します。
Search Appearance > Taxonomies > Category URLs.
Strip the category base (usually /category/) from the category URL
からremove
を選択します。
タグの削除に関しては、まだ解決策が見つかりませんでした。
代わりに、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 );
カテゴリ以外のプラグインは機能しませんでした。
マルチサイトWordPressの場合、次のように機能します。
\
でサイトを開く;/%category%/%postname%/
と入力します。これにより、URLがwww.domainname.com/categoryname/postname
として表示されます。yourdoamainname/blog/
として表示します。無視します。今保存すると、ステップ4で行った作業は上書きされます。 。ドットトリックは、おそらく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;
}
組み合わせ(URLベースのタグ、カテゴリ、ページ)をまだ検索している場合は、私と同じように実行できます。
.
)を設定します( https://premium.wpmudev.org/blog/removing-category-base-urls-wordpress / )Wordpress 3.9.1を使用してテスト済み
同じ名前のページ、カテゴリ、またはタグがある場合、システムは次のことを行います。
パーマリンクでカスタム構造を選択し、ドメインの後に/%category%/%postname%/を追加します。カテゴリベースに「/」を追加しても機能しません。ピリオド/ドットを追加する必要があります。このためのチュートリアルをここに書きました: RLチュートリアルからカテゴリを削除
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
WordPress 5.0.2:
既存の投稿からカテゴリスラッグを削除するには、次を実行します:
/%category%/%postname%/
から/%postname%/
に変更しますすべての投稿にdomain.com/%postname%/
から直接アクセスできるようになり、すべてのカテゴリにdomain.com/category/xyz/
からアクセスできるようになりました。 WordPressは、古いURLのすべての301リダイレクトを自動的に追加します。したがって、誰かがdomain.com/%category%/%postname%/
にアクセスすると、自動的にdomain.com/%postname%/
にリダイレクトされます。
コードを使用してそれを行う方法はわかりませんが、プラグインを使用してもかまいません。これは私のために働く素晴らしいものです:
他の解決策:
wp-includes/rewrite.phpファイルには、次のコードが表示されます。$this->category_structure = $this->front . 'category/';
関数全体をコピーし、functions.phpに入れてフックします。上記の行を次のように変更するだけです:$this->category_structure = $this->front . '/';
https://wordpress.org/plugins/remove-category-url/ このプラグインを使用すると、category-baseを完全に隠すことができます。インストールするだけで設定を行う必要はありません。