web-dev-qa-db-ja.com

カスタム投稿タイプで投稿を取得してからカスタムフィールドを表示する方法

レシピ用のカスタム投稿タイプがあり、その中に(カスタムプラグインから)高度なカスタムフィールドを設定しました。

そのカスタム投稿タイプには、いくつかのカテゴリがあります。二つの質問:

1.)カスタムカテゴリからすべての投稿を取得するにはどうすればよいですか。カスタムフィールドの表示方法はわかりますが、カスタムカテゴリからすべての投稿を呼び出す方法がわからない場合は、タイトル、画像、およびリンクを表示できます。

2.)カスタム投稿タイプのシナリオでは、カスタムカテゴリも設定した方がよいでしょうか、それとも一般的な投稿カテゴリを使用した方がよいでしょうか。

私はget_postsを試した後、カスタムカテゴリで投稿を取得してみました。例えば

<?php
$args = array(
     'posts_per_page' => 8,
     'orderby' => 'Rand',
     'post_type' => 'recipes',
     'type' => 'side-dishes',
     'post_status' => 'publish'
);
$show_albums = get_posts( $args );
?>

Post_typeはカスタム投稿であるため、正確な実装はわかりません。そして、おそらくthe_fieldを使用するためにfor-eachを実行する必要があるでしょう(ACFから)。

=================================================== ========= Ok下の提案を読んだ後に、これを正しく実行しているかどうかをお知らせください。

これがクエリです - これはうまくいくようです:

<?php

// The Query
$the_query = new WP_Query($args = array(
    'post_type' => 'recipes',
    'custom_cat' => 'side-dishes'
) );

// The Loop
if ( $the_query->have_posts() ) {
        echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
        echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();?>

分類法を登録しましたが、混乱しているのは、登録済みの投稿タイプはレシピであり、register_taxonomyを「recipes」であって「custom_cat」ではないということです。

register_taxonomy( 'custom_cat', 
        array('recipes'), /* if you change the name of register_post_type( 'custom_type', then you have to change this */
        array('hierarchical' => true,     /* if this is true, it acts like categories */
            'labels' => array(
                'name' => __( 'Recipe Categories', 'bonestheme' ), /* name of the custom taxonomy */
                'singular_name' => __( 'Recipe Category', 'bonestheme' ), /* single taxonomy name */
                'search_items' =>  __( 'Search Recipe Categories', 'bonestheme' ), /* search title for taxomony */
                'all_items' => __( 'All Recipe Categories', 'bonestheme' ), /* all title for taxonomies */
                'parent_item' => __( 'Parent Recipe Category', 'bonestheme' ), /* parent title for taxonomy */
                'parent_item_colon' => __( 'Parent Custom Category:', 'bonestheme' ), /* parent taxonomy title */
                'edit_item' => __( 'Edit Custom Category', 'bonestheme' ), /* edit custom taxonomy title */
                'update_item' => __( 'Update Custom Category', 'bonestheme' ), /* update title for taxonomy */
                'add_new_item' => __( 'Add New Custom Category', 'bonestheme' ), /* add new title for taxonomy */
                'new_item_name' => __( 'New Custom Category Name', 'bonestheme' ) /* name title for taxonomy */
            ),
            'show_admin_column' => true, 
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array( 'slug' => 'custom-slug' ),
        )
    );

これが登録された投稿タイプです:

function create_recipe() { 
    // creating (registering) the custom type 
    register_post_type( 'recipes', /* (http://codex.wordpress.org/Function_Reference/register_post_type) */
        // let's now add all the options for this post type
        array( 'labels' => array(
            'name' => __( 'Recipes', 'bonestheme' ), /* This is the Title of the Group */
            'singular_name' => __( 'Recipe', 'bonestheme' ), /* This is the individual type */
            'all_items' => __( 'All Recipes', 'bonestheme' ), /* the all items menu item */
            'add_new' => __( 'Add New Recipe', 'bonestheme' ), /* The add new menu item */
            'add_new_item' => __( 'Add Recipe', 'bonestheme' ), /* Add New Display Title */
            'edit' => __( 'Edit', 'bonestheme' ), /* Edit Dialog */
            'edit_item' => __( 'Edit Recipe', 'bonestheme' ), /* Edit Display Title */
            'new_item' => __( 'New Recipe Type', 'bonestheme' ), /* New Display Title */
            'view_item' => __( 'View Recipe', 'bonestheme' ), /* View Display Title */
            'search_items' => __( 'Search Recipes', 'bonestheme' ), /* Search Custom Type Title */ 
            'not_found' =>  __( 'Nothing found in the Database.', 'bonestheme' ), /* This displays if there are no entries yet */ 
            'not_found_in_trash' => __( 'Nothing found in Trash', 'bonestheme' ), /* This displays if there is nothing in the trash */
            'parent_item_colon' => ''
            ), /* end of arrays */
            'description' => __( "Recipes section for It's Just food", 'bonestheme' ), /* Custom Type Description */
            'public' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'show_ui' => true,
            'query_var' => true,
            'menu_position' => 4, /* this is what order you want it to appear in on the left hand side menu */ 
            'menu_icon' => get_stylesheet_directory_uri() . '/library/images/custom-post-icon.png', /* the icon for the custom post type menu */
            'rewrite'   => array( 'slug' => 'recipes', 'with_front' => false ), /* you can specify its url slug */
            'has_archive' => 'recipes', /* you can rename the slug here */
            'capability_type' => 'post',
            'hierarchical' => false,
            /* the next one is important, it tells what's enabled in the post editor */
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
        ) /* end of options */
    ); /* end of register post type */
4
user31344

これはあなたにとって良い読みかもしれません 。私はあなたが何をしようとしているのか正確にはわからないので、私はこれを簡単なフォーマットでレイアウトします。

このクエリは、カスタムフィールドside-dishesが存在するPost Type recipesの下にあるすべての投稿を取得します。それからあなたはループしてあなたが望むようにそれらを表示することができます。

$recipes = new WP_Query(
    array(
        'post_type' => 'recipes',
        'posts_per_page' => 8,
        'orderby' => 'Rand',
        'post_status' => 'publish',
        'meta_query' => array(
            array(
                'key' => 'side-dishes'
                'compare' => 'EXISTS'
            )
        )
    )
);

この2番目のクエリは、分類法my_taxonomy_name_hereの下にあるすべての投稿を取得します。これは、分類法に置き換える必要があります。スラッグmy_category_slug_hereを持つカテゴリを探し、それをカテゴリスラグに置き換える必要があります。 'slug'をIDに置き換えて、必要に応じてそれを元に引き出すことができます。

$recipes = new WP_Query(
    array(
        'post_type' => 'recipes',
        'posts_per_page' => 8,
        'orderby' => 'Rand',
        'post_status' => 'publish',
        'tax_query' => array(
            array(
                'taxonomy' => 'my_taxonomy_name_here',
                'field' => 'slug',
                'terms' => 'my_category_slug_here'
            )
        )
    )
);

その後、通常のループのように各投稿をループ処理できます。

<?php if($recipes->have_posts()) : ?>
    <?php while($recipes->have_posts()) : $recipes->the_post(); ?>
        <h1><?php the_title(); ?></h1>
        <?php the_content(); ?>
    <?php endwhile; ?>
<?php endif; wp_reset_query(); ?>

WP_Queryに関するドキュメント

Meta_Queryのドキュメント

Tax_Queryのドキュメント

4
Howdy_McGee