私はテーマ名flozoのwordpressサイトで作業しています。これには、work
。各カテゴリーに基づいてテンプレートに作品を表示したかった。
コードは次のとおりです。
<?php
$args = array( 'post_type' => 'work', 'posts_per_page' => 15 );
$loop = new WP_Query( $args );
$count = 0;
echo '<ul>';
while ( $loop->have_posts() ) : $loop->the_post();
$count++;
$class = ($count % 3 == 1) ? 'first' : '';
echo '<li class="'.$class.'">';
echo '<a href="';
the_permalink();
echo '">';
echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
the_post_thumbnail('full');
echo '</a>';
echo '<br />';
echo '<h2><a href="';
the_permalink();
echo '">';
the_title();
echo '</a></h2>';
echo '<div class="entry-content">';
echo limit_words(get_the_excerpt(), '30');
echo '..</div>';
echo '</li>';
endwhile;
echo '</ul>';
?>
私は追加しました
$args = array( 'post_type' => 'work', 'tag_ID' => 15 ,'posts_per_page' => 15 );
どこ 15
は私のカテゴリのIDですが、機能しませんでした
私も試しました
<?php
$catquery = new WP_Query( 'cat=15&posts_per_page=3' );
while($catquery->have_posts()) : $catquery->the_post();
?>
<ul class="last-cat">
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_post_thumbnail(); ?> <p><?php the_title(); ?></p><span><?php echo get_the_date(); ?></span></a></li></ul>
<?php endwhile; ?>
これも役に立ちませんでした。
編集:
カテゴリのURLは
投稿タイプの登録コードは次のとおりです。
add_action('init', 'work_register');
function work_register() {
$labels = array(
'name' => _x('Work', 'post type general name'),
'singular_name' => _x('Work Item', 'post type singular name'),
'add_new' => _x('Add New', 'work item'),
'add_new_item' => __('Add New Work Item'),
'edit_item' => __('Edit Work Item'),
'new_item' => __('New Work Item'),
'view_item' => __('View Work Item'),
'search_items' => __('Search Work'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 'capability_type' => 'post',
'hierarchical' => true,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'work' , $args );
register_taxonomy("categories", array("work"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Category", "rewrite" => array( 'slug' => 'work', 'with_front'=> false )));
}
他の両方の答え、特にOPからの答えは正しくありません。 _query_posts
_は決して使用しないでください。コーデックスにも記載されているので、コーデックスを読んでください。また、メインクエリをカスタムクエリに置き換えないでください。
解決策は私が以下に説明するように単純であり、それはそれを行う正しい方法です。
ここにいくつかの欠陥があります
カスタム投稿タイプにアーカイブを含めるには、カスタム投稿タイプ登録引数で_has_archive
_パラメーターをtrue
に設定する必要があります。 register_post_type()
を参照してください
ページのようなカスタム投稿タイプを使用しない場合は、hierarchical
パラメーターをfalse
に設定します。これをtrueに設定すると、投稿が増えるにつれてバックエンドの速度が大幅に低下します。Wordpressは、ページの場合と同様に、投稿ごとにツリーを構築しようとします。
メインクエリの代わりにカスタムクエリを使用しないでください。それは常により厄介で、リソースの浪費です。カスタムクエリを正しく使用する場所とタイミングの詳細については、 この投稿 を参照してください。
この点は前の点の延長です。メインクエリを変更する必要がある場合は、_pre_get_posts
_を使用して変更します。メインクエリが_WP_Query
_を使用して投稿をフェッチするため、_WP_Query
_とまったく同じパラメータを使用します。これはすべて上記のリンクされた投稿で説明されています
カスタムクエリの主な欠点は、カテゴリ、タグ、カスタム分類法の違いが何であるかを理解していないことです。私はこれについて完全な投稿(あなたが読むことができる ここ )を書き、実際にそれをコーデックスにも入力しました。カスタム分類法を使用しているため、カテゴリパラメータは機能しません。カスタム分類には _tax_query
_ を使用する必要があります
問題を解決するには、次の手順に従います
カスタム投稿タイプを登録するときに引数に_has_achive
_パラメーターを追加し、それをtrue
に設定します。必要に応じて、カスタム投稿タイプでもhierarchical
パラメータをfalse
に設定します。 (カスタム分類法にこれを設定しないでください。これにより、分類法が通常のタグのように動作します)
この後、「設定」の下のパーマリンクページにアクセスし、「更新」をクリックして、書き換えルールをフラッシュします。
新しいルールが保存されていることを確認するためだけにホームページにアクセスしてください
カスタムクエリを削除して、デフォルトのループに戻ります。 _archive-work.php
_は次のようになります
_if( have_posts() ) {
while( have_posts() ) {
the_post();
// Your custom markup and template tags
}
}
_
特定の用語の投稿を表示する必要がある場合は、_taxonomy.php
_、_taxonomy-{$taxonomy}.php
_、または_taxonomy-{$taxonomy}-{$term}.php
_テンプレートを作成します。詳細については、 テンプレート階層 を確認してください
カスタム投稿タイプのアーカイブ用語に特定の用語のみを表示する必要がある場合は、上記を実行した後、_pre_get_posts
_を使用してメインクエリを正しい方法で変更します
_add_action( 'pre_get_posts', function ( $q ) {
if( !is_admin() && $q->is_main_query() && is_post_type_archive( 'work' ) ) {
$q->set( 'categories', 'slides' );
}
});
_
これを解決するためのコードは次のとおりです
投稿タイプを登録するコードの代わりに、次のコードをコピーして貼り付けます。 _has_archive
_パラメーターを追加しました。また、分類法の書き換えルールをcategories
に変更しました。カスタム投稿タイプと分類法の両方に同じスラッグを使用するのは本当に面倒です。これはデフォルトでは機能せず、すべてを完全にターゲットから外します
_add_action( 'init', 'work_register' );
function work_register() {
$labels = array(
'name' => _x('Work', 'post type general name'),
'singular_name' => _x('Work Item', 'post type singular name'),
'add_new' => _x('Add New', 'work item'),
'add_new_item' => __('Add New Work Item'),
'edit_item' => __('Edit Work Item'),
'new_item' => __('New Work Item'),
'view_item' => __('View Work Item'),
'search_items' => __('Search Work'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => array( 'slug' => 'work', 'with_front'=> false ),
'capability_type' => 'post',
'hierarchical' => true,
'has_archive' => true,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'work' , $args );
register_taxonomy( 'categories', array('work'), array(
'hierarchical' => true,
'label' => 'Categories',
'singular_label' => 'Category',
'rewrite' => array( 'slug' => 'categories', 'with_front'=> false )
)
);
register_taxonomy_for_object_type( 'categories', 'work' ); // Better be safe than sorry
}
_
Archive-work.phpで、カスタムクエリをこのコードに置き換えます
_<?php
$count = 0;
echo '<ul>';
while ( have_posts() ) : the_post();
$count++;
$class = ($count % 3 == 1) ? 'first' : '';
echo '<li class="'.$class.'">';
echo '<a href="';
the_permalink();
echo '">';
echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
the_post_thumbnail('full');
echo '</a>';
echo '<br />';
echo '<h2><a href="';
the_permalink();
echo '">';
the_title();
echo '</a></h2>';
echo '<div class="entry-content">';
echo limit_words(get_the_excerpt(), '30');
echo '..</div>';
echo '</li>';
endwhile;
echo '</ul>';
?>
_
非常に重要-> OK、今度は設定>>バックエンド(管理領域)のパーマリンクにアクセスしてください変更を保存をクリックします。これにより、パーマリンクがフラッシュされ、新しいパーマリンク構造が設定されます
にアクセスすると、カスタム投稿タイプのすべての投稿が表示されます。
<?php
query_posts( array( 'post_type' => 'work', 'categories' => 'slides' ) );
//the loop start here
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<h3><?php the_title(); ?></h3>
<?php the_content(); ?>
<?php endwhile; endif; wp_reset_query(); ?>
私はついにそれを ここ 完璧から手に入れました
以下のコードで試してください、
<?php
$args = array( 'posts_per_page' => 5,'post_type' => 'work','category' => 15 );
$myposts = get_posts( $args );
foreach ( $myposts as $post ):?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
このhtmlマークアップをショートコードとして行う方法
<div class="news-grid" itemtype="http://schema.org/Article" itemscope>
<h2 class="title">top news</h2>
<div class="featured">
<a href="" itemprop="url" title=""><img width="282" height="178" src="" class="lead-thumbnail wp-post-image" alt="" /></a>
<h3><a href="" itemprop="url" title="</a></h3>
<p itemprop="description"><a href='' class='readmore'> »</a></p>
</div>
<div class="more-item">
<ul>
<li><p><a href="" rel="bookmark" itemprop="url" title=""></a></li>
<li><p><a href="" rel="bookmark" itemprop="url" title=""></a></li>
<li><p><a href="" rel="bookmark" itemprop="url" title=""></a></li>
<li><p><a href="" rel="bookmark" itemprop="url" title=""></a></li>
</ul>
</div>
</div>