9

2012年10月25日-まだ解決されていません!下記を参照してください:

私のクライアントには、["]文字と一部のタグの[The]プレフィックスを含むタグが付いたWordPressタグクラウド(タグ配列)があります。つまり、

"rose"
"autumn"
The Abby
The Cloud
The Elephant

明らかに、引用符["]で囲まれたすべてのタグはリストの一番上に並べ替えられ、[The]プレフィックスで始まるすべての単語は文字[T]の周りのどこかに並べ替えられます(論理ASCの順序に従います)。

「(WPタグクラウド内の)すべてのタグは昇順で並べ替える必要がありますが、[""]または[The]文字を含むタグは、無視して、他のすべてのタグと時系列で並べ替える必要があります。 ["]および[The]プレフィックス。

WPコア機能を調べました。

**function wp_generate_tag_cloud**

でもどこから始めたらいいのかわからない。生のSQLステートメントでは、おそらくtrim()を使用して、タグクラウド配列を形成する[""]文字と[The]文字を除外できますが、それは私がどのように適用するかわからない考えにすぎません。

4

3 に答える 3

4

wp_generate_tag_cloud()という名前のフィルターを呼び出します。これは、パラメーターtag_cloud_sortで指定された並べ替え順序をオーバーライドできます。フィルタは、タグの配列と に渡された実際の$argsパラメータを受け取るため、呼び出しの完全な設定を検査し、それに応じて動作を調整できます。tag_cloud_sort$argswp_generate_tag_cloud()wp_generate_tag_cloud()

次のようなことを試すことができます:

function custom_tag_sort($tags, $args) {
    if ($args['orderby'] != 'name') {
        // do not reorder if sort order is not by name.
        // wp_generate_tag_cloud() is smart enough to notice order
        // is not changed and will proceed with its regular sort logic.
        return $tags;
    }
    uasort($tags, 'custom_tag_sort_compare');
}

function custom_tag_sort_compare($a, $b) {
    return strnatcasecmp(
        custom_tag_sort_normalize($a->name),
        custom_tag_sort_normalize($b->name)
    );
}

function custom_tag_sort_normalize($tag) {
    // strip quote marks
    $tag = trim($tag, '"');
    // strip leading definitive article
    $tag = preg_replace('/^\s*the\s+/i', '', $tag);
    return $tag;
}

add_filter('tag_cloud_sort', 'custom_tag_sort');

免責事項: 私はwp_generate_tag_cloud()関数をざっと調べただけでこれを書きました。WordPress のライブ インストールではテストしていません。サンプル タグ クラウドで並べ替え機能が正しく動作することを確認しただけです。

The Abby
"autumn"
The Cloud
The Elephant
"rose"
于 2012-10-26T19:45:15.707 に答える
2

わかりましたので、ワードプレスのコアコードを変更することは避けたいと思います...クライアントが変更しないように言った後に更新ボタンを押した場合、もう一度いじる必要があります..代わりにアクションフックを使用してください。タグ クラウド関数の出力にフックするための便利なものがあります。これをテーマ関数ファイルに追加します

function tagCloudFilter($tagCloudString, $args)
{
    $tagCloudString = str_replace('The','', $tagCloudString);
    $tagCloudString = str_replace('"','', $tagCloudString);
}

add_filter('wp_tag_cloud', 'tagCloudFilter', 10, 2);

それは少なくともあなたが望まないものを取り除くでしょう. それを並べ替える限り、確かではありませんが、これであなたの道が開けるはずです。jqueryでソートしたほうが楽かもしれません

本当にコアコードを変更したい場合は、フォーマットする前にタグ配列で foreach ループを実行し、そのループで上記の str_replaces を使用します。その配列で sort() を実行するだけで問題ありません。しかし、それが私だったら、ワードプレスのコアを変更するよりも、アルファベット順ではなく、半分のソリューションを使用します

于 2012-10-24T02:54:12.940 に答える
0

ここに考えがあります:

元の tag_cloud 関数をコピーして、functions.php に独自の関数を作成できます。

必要な変更を行い、このフィルターを関数内に追加します。

$return = apply_filters( 'YOUR_tag_cloud_function', $return, $args );

次に、前のフィルターを作成して、関数をフックに追加します。

add_filter('wp_tag_cloud', 'YOUR_tag_cloud_function');

動作するかどうかはわかりません。テストしていません。どう思いますか?

于 2012-10-26T15:30:56.877 に答える