web-dev-qa-db-ja.com

テンプレートに特定のページを含める

特定のページをテンプレートに含める方法

たとえば、私のWebサイトのメインページにあるように、クライアントが必要に応じて定期的に更新できる約3つの異なるコンテンツ領域が必要です。私はおそらくこれを行うための最良の方法はテンプレートにページを入れ子にすることであると思うかもしれません、そして彼はそのページを編集することができます。

これを設定するにはどうすればよいですか。ワードプレスコーデックス、ワードプレスフォーラム、そしてグーグルはすべて私に解決策を与えることに失敗しました。

これを可能にするプラグインがあることを私は知っていますが、それは3.1以上とは互換性がありません。私はとにかくプラグインを使用するという考えが嫌いです、私はwordpressがこれのために簡単なテンプレートタグシステム設定を持つだろうと考えました、間違っています.... PHPはおそらく答えが出てくるところです。

ご協力いただきありがとうございます

pSまた、入れ子になったページを使用する以外にこれについてうまくいく方法を知っているならば、私に知らせてください。私は単なるワードプレスの専門家であり、これがタスクを達成するための直接的な方法になるだろうと考えました。

1
randyttp

このようなことを実現するもう1つの優れた方法は、WordPressカスタム投稿タイプを利用することです。

WordPressバックエンドで簡単に使用できるように、3種類の機能を設定できます。

まず、カスタム投稿タイプを設定します

これを行うには、テーマのfunctions.phpファイルを開き、次のようなものを含めます。

<?php
function custom_register_post_types() {
    $labels = array(
        'name' => _x('People', 'post type general name'),
        'singular_name' => _x('Person', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Person'),
        'edit_item' => __('Edit Person'),
        'new_item' => __('New Person'),
        'view_item' => __('View Person'),
        'search_items' => __('Search People'),
        'not_found' => __('No People found'),
        'not_found_in_trash' => __('No People found in Trash'),
        'menu_name' => 'People'
    );
    $rewrite = array(
        'slug' => 'people'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'people',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('people',$args);
    $labels = array(
        'name' => _x('Places', 'post type general name'),
        'singular_name' => _x('Place', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Place'),
        'edit_item' => __('Edit Place'),
        'new_item' => __('New Place'),
        'view_item' => __('View Place'),
        'search_items' => __('Search Places'),
        'not_found' => __('No Places found'),
        'not_found_in_trash' => __('No Places found in Trash'),
        'menu_name' => 'Places'
    );
    $rewrite = array(
        'slug' => 'places'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'places',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('places',$args);
    $labels = array(
        'name' => _x('Things', 'post type general name'),
        'singular_name' => _x('Thing', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Thing'),
        'edit_item' => __('Edit Thing'),
        'new_item' => __('New Thing'),
        'view_item' => __('View Thing'),
        'search_items' => __('Search Things'),
        'not_found' => __('No Things found'),
        'not_found_in_trash' => __('No Things found in Trash'),
        'menu_name' => 'Things'
    );
    $rewrite = array(
        'slug' => 'things'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'things',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('things',$args);
}
add_action('init', 'custom_register_post_types', 0);
?>

私はこのコード で何が起こっているかの詳細についてのリファレンスをここに書いたコーデックス でも調べることができます。

これが何をするかは、WordPressのメイン左側ナビゲーションに3つの新しいメニューを設定して、これらの各タイプにインターフェース内の独自のスペースを与えることです。この場合、人、場所、そしてもの。 (ニーズに合わせて論理的にカスタマイズする)現在、これらはタイトルバーとエディタペインのみを表示するように設定されています。

あなたのホームページで使用する投稿タイプを問い合わせる

私はすべてを素晴らしく、分離しておくために新しいクエリオブジェクトを設定するのが好きです。さらに、他のループの内外でオブジェクトを呼び出すことができます。これは便利な場合があります。これら(またはニーズに合わせてカスタマイズされたもの)をテンプレートに混ぜて、目的のページに入れます。

<?php
$args = array( 'post_type' => 'people', 'numberposts' => '1' );
$people = new WP_Query($args);
if ( $people->have_posts() ) : 
    while ( $people->have_posts() ) : 
        $people->the_post(); 
        global $more;
        $more = 0;
?>

<div id="people-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

<?php
$args = array( 'post_type' => 'places', 'numberposts' => '1' );
$places = new WP_Query($args);
if ( $places->have_posts() ) : 
    while ( $places->have_posts() ) : 
        $places->the_post(); 
        global $more;
        $more = 0;
?>

<div id="places-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

<?php
$args = array( 'post_type' => 'things', 'numberposts' => '1' );
$things = new WP_Query($args);
if ( $things->have_posts() ) : 
    while ( $things->have_posts() ) : 
        $things->the_post(); 
        global $more;
        $more = 0;
?>

<div id="things-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

これらは、クエリとループを設定する方法のほんの一例です。これらは、それぞれのカスタム投稿タイプから最新の投稿またはトップの投稿を設定して表示するだけです。

WP_Queryクラスの詳細な説明はこちら にあります 。他のものはすべてHTMLとCSSです。

楽しい!

2
Drew Gourley

それをページを含むものとして考えるのは、少し手間がかかります。ページのコンテンツを取得して含めるものとして考えてください。

$page = get_page_by_title('About The Tests');
$content = apply_filters('the_content', $page->post_content);
echo $content;

別の方法はそれのための特別なサイドバーを設定し、クライアントにウィジェットを介して追加/削除/コンテンツをさせるでしょう。しかし、そのようなことは簡単にやり過ぎることがあります。

4
Rarst