web-dev-qa-db-ja.com

Wordpressにカテゴリではなくページを表示させる

私のWordPressサイトの1つにSILO構造を作成しようとしています。

私はいつもYoast SEOプラグイン「カテゴリURLからカテゴリベース(通常/ category /)を削除する」でこのオプションをチェックしています。

だから私のカテゴリページはこのURLを持っています:sitename.com/Apple/( "Apple"はカテゴリページです)

今度は、同じスラッグを使って新しい「ページ」を作成したいのですが、Apple。

Sitename.com/Apple/にアクセスすると、新しく作成されたページではなく、カテゴリページが表示されますが、新しい "Apple"ページを簡単に作成できます。

私の質問:カテゴリのデフォルトの優先順位をページ上で「上書き」する方法はありますか?ページを管理したいのでページを表示したいのですが - カスタマイズ、追加、そして簡単に変更することができます(さらに、ページは私のサイトをより良く構成するのに役立ちます)

あなたの助けに感謝!

4
Sid

考えられる解決策の1つは、 not カテゴリベースを変更してそのままにすることですが、代わりにカテゴリリンクの出力を変更してフィルタを介してカテゴリベースを削除することです。これらのリンクが指す場所の代わりにページを作成していない場合、当然これは404になります。そのため、すべてのカテゴリのページを作成する必要があります。

function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
    if( 'category' != $taxonomy ) return $termlink;

    return str_replace( '/category', '', $termlink );
}
add_filter( 'term_link', 'wpa_alter_cat_links', 10, 3 );

あなたはおそらくあなたの自己責任で使用して、あらゆる副作用のためにこれを徹底的にテストしたいと思うでしょう!

_ edit _ - トップレベルのカテゴリリンクだけを変更する:

function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
    if( 'category' == $taxonomy && 0 == $term->parent ){
        return str_replace( '/category', '', $termlink );
    }
    return $termlink;
}
add_filter( 'term_link', 'wpa_alter_cat_links', 10, 3 );
5
Milo

コンテンツを読み込むときにページをカテゴリよりも重要度を高めるために、次のようなかなり単純な関数を作成しました。

(注:これは最善ではないかもしれませんが、単純な方法です。Advanced Custom Fieldsプラグインを使用すると、デフォルトでは古いページにも新しいページにもカスタムフィールドが挿入されないという問題がありました。get_queried_object()->IDの追加ACF get_field()の2番目のパラメータがこれを解決したので、WP環境で慎重にテストしてください。)

function loadPageFirst() {
    // get the actual category
    $actualCategory = get_category( get_query_var('cat') );
    // get the page with the same slug
    $matchingPage = get_page_by_path( $actualCategory->slug );

    // If no match, load the normal listing template and exit (edit if you are using a custom listing template, eg. category.php)
    if (!$matchingPage) {
        include( get_template_directory() . '/archive.php');
        die();
    }

    // Make a new query with the page's ID and load the page template
    query_posts( 'page_id=' . $matchingPage->ID );
    include( get_template_directory() . '/page.php');
    die();
}
add_filter( 'category_template', 'loadPageFirst' );

テーマのfunctions.phpに含めることができます。これはYoast SEOプラグインではうまく動作するようです。

2
bencergazda

ここに超単純で完璧に機能する答えがあります: https://stackoverflow.com/questions/32310453/make-wordpress-use-the-page-instead-of-category

完全性の袋のために:

背景

  • example.comはドメインです
  • "foobar"という名前のWPページがあります。
  • "foobar"という投稿カテゴリが[WPあります
  • 私はWPという投稿をしていて、 "foobarsでやるべきこと"という題名で、カテゴリは "foobar"に設定されています。

期待値

  • Example.com/foobarにアクセスすると、そのカテゴリのすべてのブログ投稿を表示するWPカテゴリページではなく、foobarsに関するページが表示されます。
  • 私が楽しいことについてのブログ投稿に行くとき、URLはexample.com/foobar/fun-things-to-do-with-foobars/です。

セットアップ

これが私の設定です(追加のプラグインやコードの編集は必要ありません)。インストールされているプラ​​グインのいくつかはWP RocketとYoastで、このスレッドに焦点を当てます。

  1. WPダッシュボード - >設定 - >パーマリンク

  2. [カスタム構造]を選択し、フィールドに/%category%/%postname%/と入力します。

  3. 同じページで、「カテゴリベース」を単一のドットに変更します。 "" (引用符なし、ピリオド1つ、ピリオド1つだけ

私はYoastをインストールしました。これはパーマリンクの設定を上書きするように設定したものですが、これは私の仕事をめちゃくちゃにしていたと思います。

  1. WPダッシュボード - > SEO - >詳細設定 - >パーマリンク(タブ)

  2. "URLの変更 - >カテゴリベースを削除..." =保存

  3. その後、キャッシュをクリアする必要があります。キャッシュにWP Rocketを使用しているので、キャッシュをフラッシュしたところ、すべて正常に機能します。

編集: 手順3と5の後に必ず変更を保存してください。

1
Paul Woods

依存します。同じURLで2つの異なるページを設定しようとしているのであれば、お勧めできません。あなたがカテゴリページを気にしないのであればあなたはあなたのページにそれらをリダイレクトすることができます。

 RedirectMatch 301 ^/category/(.*)$ /$1

このコードは.htaccessに入り、/ category/pageを/ page /にリダイレクトします。

0
JMau

これを行うための「WordPressの方法」は、独自の「ページ」を作成するのではなく、カテゴリページ用のカスタムphpテンプレートを作成し、そこでカスタマイズを適用することです。

カテゴリアーカイブページに画像や他のカスタムフィールドを追加することを可能にする利用可能なプラグインも多数あります。テーマファイルを変更しないのであれば、これはより良い選択肢かもしれません。

代わりに、おそらくあなたの主なターゲットキーワードの1つであるカテゴリベースを追加することをお勧めします

0
qccreative

最初にyoastのカテゴリを削除するインデックスを作成しないで、その前にパーマリンク構造を/%category%/%postname%/に設定する必要があります。

0
Vale