0

カスタム投稿タイプに保存されている多数のプロジェクトを表示する Wordpress サイトで作業しています。各カスタム投稿には、「プロジェクト名」と「プロジェクトの色」の 2 つのカスタム フィールドが含まれています。特定の「プロジェクト名」に関するカスタム投稿が複数ある場合があります。

上記のカスタムフィールドの値から取得した「プロジェクト名」と「プロジェクトの色」をリストするすべてのプロジェクトの凡例 (キー) を作成したいと考えています。

たとえば、「バナナ」という色が「黄色」のプロジェクトが 3 つ、「オレンジ」という色が「オレンジ」のプロジェクトが 6 つ、「緑」の色が「アップル」というプロジェクトが 4 つあるとします。私の凡例 (キー) は、黄色でバナナを 1 つ、オレンジでオレンジを 1 つ、緑でリンゴを 1 つ表示する必要があります。

もちろん、ループを使用すると、バナナ 3 個、オレンジ 6 個、リンゴ 4 個が表示されます。プロジェクト名とプロジェクトの色のリストだけを表示するにはどうすればよいですか?

カスタム分類、配列内の重複のチェック、およびGROUP BYのフィルターとしての使用の 3 つの方法を見てきましたposts_groupby

GROUP BY正しい方法のように思えますが、何もすることができません。私が得た最も遠いものは、これを私の functions.php に入れることでした...

function sort_legend ( $groupby ) {
    global $wpdb;
    $groupby .= "{$wpdb->postmeta}.meta_key = 'Color' "; 
    return $groupby;
}

...そして、それを Query オブジェクトの周りにフィルターとして適用します...

<?php  add_filter('posts_groupby', 'sort_legend'); ?>
<?php if ( $myQuery->have_posts() ) while ($myQuery->have_posts() ) : $myQuery->the_post(); ?>
<?php remove_filter('posts_groupby', 'sort_legend'); ?>

...しかし、まだ複数のエントリがあります。

4

1 に答える 1

0

これが私の実用的なソリューションです...

カスタム テンプレートから「Project Colors」と「Project Names」カスタム フィールドを削除し (ため息)、「Project Classes」というカスタム分類を登録し、新しく登録した分類をカスタム投稿タイプに割り当てます。こちらを参照してください。Wordpress インターフェースで、各カスタム投稿に適切な「プロジェクト クラス」のバナナ、リンゴなどを与えます。これも上記のリンクで説明されています。

ただし、カスタム分類エントリごとにカラー キーを表示する方法については、まだ問題があります。各スタイル名に背景色を付けることができるように、プロジェクト クラス名をスタイル シート名として再利用しました。ただし、実際のプロジェクト クラス名には、スタイル シートに適したものにするために削除する必要がある大文字とスペースが含まれています。

rename_projects「プロジェクトクラス」分類名のスペースと大文字を修正し、css スタイル名に適したものにする php 関数を functions.php に追加します。

// Rename Projects custom field for css styles
function rename_projects($sProjectName) {
$sFind = ' '; 
$sReplace = '-';
$sAmended = mb_strtolower(str_replace( $sFind, $sReplace, $sProjectName ));
return $sAmended;
}

プロジェクト クラス名をスタイル シート名として使用できるようになりました。

次に、ページ テンプレートでカスタム分類法を表示します。

<?php
    $args=array(
    'taxonomy' => 'projectclass',
    'orderby' => 'name',
    'order' => 'ASC'
    );
    $categories=get_categories($args);
    foreach($categories as $category) {
        $sColorName = rename_projects($category->name); // To lower case and replace spaces
        echo '<div class="legend-color ' . $sColorName . '"></div> // Color style name
        <div class="legend-project">' . $category->name . '</div>'; // Taxonomy name
    } 
?>

たとえば、$category->name「My First Project」には、my-first-projectスタイル シートとスタイルに追加できる対応するスタイル シート名があります。<div class="legend-color 'では、スタイル名を既存のクラスに追加しているので、結果のクラスは「凡例色の my-first-project」、つまり 2 つのスタイルになることに注意してください。ハードコードされたクラス「legend-color」は、にある background-color を除くすべてのスタイル属性を保持します$sColorName

ここでうまくいきます。

于 2011-05-13T19:08:02.310 に答える