web-dev-qa-db-ja.com

デフォルト WP ギャラリー - 特定のカテゴリのギャラリーのみを表示

私はWordPressのデフォルトのギャラリーを使い、それらにカテゴリを追加しています。ギャラリーをページにするためのループ付きのショートコードを作成しました。

if(! function_exists('test_shortcode')){
function lv_gallery_style_one_shortcode($atts, $content = null){
    extract(shortcode_atts( array(
        'title'=>'',
        ), $atts) );

        $port=array('post_type' => 'gallery', 'category_name' => 'beach', 'showposts' => -1 );
        $loop=new WP_Query($port);
        while ( $loop->have_posts() ) : $loop->the_post(); 

        // HERE IS THE LOOP

        return $html;
}
add_shortcode('gallery_test', 'test_shortcode' );

'category_name' => 'beach'を削除するとすべてのカテゴリが表示されるので、ループはうまく機能したことを私は知っています。

--------------- 編集: -----------------

私が使用しているギャラリーには、次のアイコンとオプションがあります。

enter image description here 

これは標準的なWPギャラリーだと思いました、私は間違っていますか?

新しいギャラリーを作成すると、右側にカテゴリセクションがあります。

Category section 

使用できない場合、これは何に使用されますか?わかりません。

--------------- 編集終了: -------------

これは単なるサンプルコードです。完全版では、カテゴリ名はショートコードで入力するためのパラメータになります、それで私はこのようにそれをやりたいのです。

これを機能させる方法についてのアイデアはありますか?

任意の提案は大歓迎です:)。

ありがとう。

4
Serge Inácio

私の疑いは、それらのGallery Categoriescategory分類法ではないということです。それらはおそらくギャラリーの投稿タイプを追加したのと同じスクリプトによって登録された、登録された分類法です。

調べるには、(提供されている画像の)Gallery Categoriesをクリックすると、次のようなURLにリダイレクトされます。

http://example.com/wp-admin/edit-tags.php?taxonomy=my-taxonomy&post_type=gallery

taxonomy引数を確認してください。もしそれがcategory以外であれば、あなたはカスタム分類法に従っているので、あなたはあなたのtax_queryWP_Queryを加える必要があります。これを行う方法は次のとおりです。

あなたの引数は単にこれから変わるでしょう:

$port=array('post_type' => 'gallery', 'category_name' => 'beach', 'showposts' => -1 );

これに:

$port = array(
     'post_type' => 'gallery', 
     'showposts' => -1,
     'tax_query' => array (
          array(
              'taxonomy' => 'my-taxonomy',
              'field'    => 'slug',
              'terms'    => 'beach',
          )
     )
);

サイドノート:

return $html;の直前にwp_reset_postdata();を使用してください。これによりクエリがリセットされ、ショートコードがページ内の他のクエリに影響しないようになります。

全部できた。

2
Jack Johansson

あなたの質問から、私はあなたが標準のWordPressインストールで作業していることを理解しています。これは 'gallery'と呼ばれるpost-typeがないことを意味します 。あなた(またはプラグイン)がそれを作成したのであれば、 これは完全に可能です その場合、何が起こっているのか、あるいはどのようにしてコードを構築すればよいのかわかりません。

ショートコードを作成したいという事実から、通常の投稿またはページに画像を挿入することをお勧めしますが、 デフォルトのgallery-shortcode のように画像を一覧表示する代わりに、 categoryとWPは、特定のラベルの画像を挿入する必要があります。

まず、今すぐあなたのコードで何が起こっているのか理解しよう。 wp_queryの仕様からわかるように、 デフォルトのpost_typeは 'post' です。ですから、ギャラリーのように存在しないpost_typeを使うのであれば、代わりに 'post'を使います。しかし、 デフォルトのカテゴリはありません 。したがって、存在しないcategory_nameを指定した場合、クエリはゼロの結果を返します。

次に、WPがメディアを処理する方法を見てみましょう。すべての画像は「添付ファイル」タイプの投稿として保存されます。その投稿はIDを持っています。デフォルトのギャラリーのショートコードは基本的にIDのリストです。残念ながら、あなたが画像をアップロードするとき、それをカテゴリにする可能性はありません。そのため、カテゴリ別に画像を検索することはできません。しかし、これは 簡単に修正することができます

function wpse295373_add_categories_to_attachments() {
    register_taxonomy_for_object_type ('category', 'attachment');
    }
add_action ('init', 'wpse295373_add_categories_to_attachments');

アップロードした画像にカテゴリを付けることができます。それで、あなたはあなたのショートコードでそれらを検索するためにカテゴリを使うこともできます:

$port=array('post_type' => 'attachment', 'category_name' => 'beach', 'showposts' => -1 );

これは、ビーチカテゴリのすべての画像を返すはずです。

さて、あなたの質問から、これがあなたが望むものであるかどうかは不確実です。おそらくあなたはあなたが検索したい画像のギャラリーを持っているということです。したがって、カテゴリ「beach」には「スペイン」というギャラリーがあり、5つの画像、「フランス」というギャラリーがあります。それがあなたが望むものであれば、あなたは確かにあなた自身のpost_typeを作成しなければならないでしょう。

2
cjbj