web-dev-qa-db-ja.com

カスタム投稿タイプのアーカイブページと分類ページにコンテンツを追加する

"Products"というカスタム投稿タイプと "Usage"という分類法があります。私の "Products"ランディングページには、クライアントがWYSIWYG経由で編集できるカスタムコンテンツが欲しいのですが。タクソノミーランディングページについても同様です。私の考えは、偽のページを作成し、IDを使用してarchive-products.phpおよびtaxonomy-usage.phpテンプレートにコンテンツを取り込むことでしたが、それを処理するよりよい方法があるかどうかに興味がありました。

8
paper_robots

最初の解決策は Settings API を使用して2つのフィールド"Products Description""Usage Description"を作成することです。 :

$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];

ただし、設定APIはWPコアの最良の部分ではないため、おそらくその価値のないフィールドのみに設定ページを作成します。

もう1つの方法は、ページをアーカイブとして使用することです( カスタムページテンプレート を使用)。

ページを作成して "Product Archive"という名前を付けます。

その中にそのようなものを入れます:

<?php
/*
Template Name: Products Archive
*/

 get_header();

 if ( have_posts() ) the post();

 the_content(); // this will output the page content     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // this will require a 'entry-product.php' where you can put all your product markup
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

その後、バックエンドでページを作成し、作成したばかりのテンプレートに割り当てます。ページのコンテンツに必要なものをすべて入力して、ページを開くと、ページのコンテンツと商品が表示されます。

分類ページについても同じことができます。ページテンプレートとその中のクエリを変更するだけです。

何らかの理由でarchive-products.phpを製品アーカイブとして使用する必要がある場合は、代わりにカスタムテンプレートを作成しますが、それはページコンテンツの取得にのみ使用します。

テーマにphpファイルを作成し、 'page-prod-description.php' という名前を付けます。このファイルには次のものだけを入れてください。

<?php
/*
Template Name: Products Description
*/
wp_safe_redirect( home_url() );
exit();

このファイルがすることは、カスタムページテンプレートを作成することです。そのテンプレートはページに添付することができますが、あなたがそれを試すとホームページにリダイレクトされるので、それらのページを直接と呼ぶことはできません。

バックエンドにログインしてページを作成し、「Products Description」というタイトルを付けて、作成したばかりのページテンプレートを割り当てます。ページhttp://example.com/product-descriptionにアクセスしようとすると、ホームページにリダイレクトされます。

商品アーカイブテンプレートarchive-products.phpでは、そのページに挿入されたコンテンツを次のように使用できます。

$desc = get_pages('meta_key=_wp_page_template&meta_value=page-prod-description.php');
if ( ! empty($desc) ) {
   $page = array_shift($desc);
   echo apply_filters('the_content', $page->post_content );
}

これであなたのクライアントはバックエンドにログインして "Products Description"ページを編集することができ、ページの内容に書かれたものはすべてアーカイブページに表示されます。

もちろん、分類アーカイブについても同じことができます。

13
gmazzap

通常のページを作成してから、適切なカスタムループを含むカスタムテンプレートを適用してCPTを出力できます。あるいは、クライアントがWYSIWYGを介してコンテンツを追加できるオプションページを作成して(またはテーマカスタマイザにオプ​​ションを追加して)、そのコンテンツを適切なアーカイブテンプレートに出力することもできます。

0
markcbain