タグ名にカンマを使用したいのですが。例えば、"hello, world"
や"portland, or"
ですが、Wordpressはそれらを分離し続けます。私はカテゴリページからそれをすることができます:
画像http://img839.imageshack.us/img839/6869/picturepp.png
そしてそれはうまく現れます。しかし、投稿サイドバーから追加されたものは、ここではうまく表示されません。
画像http://img52.imageshack.us/img52/4950/picture1oax.png
ここでそれについていくらか議論があります: http://core.trac.wordpress.org/ticket/14691 しかし、少なくともしばらくの間、それは解決されないかもしれないように見えます。
それまでの間、カテゴリページからカテゴリを追加するよりも簡単な解決策を探しています。
私はプラグインを検索してみましたが、役立つと思われるものは見当たりませんでした。カテゴリのリストやタグを表示するときにカンマを他の文字に置き換えることを扱う例はいくつかありますが、ユーザがデフォルトのセパレータを置き換えることを可能にするプラグインはありません。
自分でコアにパッチをあてる必要があるかどうかは気にしません。理想的にはプラグインを書くことができますが、コードの一部を見た後でこれが処理される場所を特定することはできません。
誰かが解決策を持っていますか、またはハッキングを始めるためにどんな機能とジャバスクリプトについてのヒント?どこからコードを探し始めるのかわかりません。
コアハッキングは必要ありません - おかげで:HOOKS。
フックはの素敵な組み合わせで問題を解決することができます
これがコードです:
// filter for tags with comma
// replace '--' with ', ' in the output - allow tags with comma this way
// e.g. save tag as "Fox--Peter" but display thx 2 filters like "Fox, Peter"
if(!is_admin()){ // make sure the filters are only called in the frontend
function comma_tag_filter($tag_arr){
$tag_arr_new = $tag_arr;
if($tag_arr->taxonomy == 'post_tag' && strpos($tag_arr->name, '--')){
$tag_arr_new->name = str_replace('--',', ',$tag_arr->name);
}
return $tag_arr_new;
}
add_filter('get_post_tag', 'comma_tag_filter');
function comma_tags_filter($tags_arr){
$tags_arr_new = array();
foreach($tags_arr as $tag_arr){
$tags_arr_new[] = comma_tag_filter($tag_arr);
}
return $tags_arr_new;
}
add_filter('get_terms', 'comma_tags_filter');
add_filter('get_the_terms', 'comma_tags_filter');
}
たぶんそのトピックへの私のブログ投稿のいくつかの追加詳細も同様に役立ちます.. http://blog.foobored.com/all/wordpress-tags-with-commas/
あいさつ、アンディ
プログラム的にタグをコンマで保存することは可能で、とても簡単です。
wp_set_post_terms( $post_id, $terms, $taxonomy )
を呼び出すときに文字列を指定すると、それは配列に分解されます。 $terms
を配列として指定すると、配列内の各項目は複数の用語に分割されることなく独自の用語として提供されます。
// Example term with comma.
$terms = 'Surname, Given Names';
// Creates and/or assigns multiple terms separated by a comma.
wp_set_post_terms( $post_id, $terms, $taxonomy );
// Creates and/or assigns a single term with a comma.
wp_set_post_terms( $post_id, (array) $terms, $taxonomy );
wp_insert_post
とそれに続くwp_update_post
はどちらも、wp_set_post_terms
$arg
が設定されている場合はtax_input
を使用します。
// Ensure $terms is an array.
$args['tax_input'][$taxonomy] = (array) $terms;
$post_id = wp_insert_post( $args );
WordPress DashboardのUIを使用してオンザフライで用語を作成するには、コンマを含む任意の文字列を単一の用語として送信する独自のメタボックスを作成する必要があります。 ACF Proなどの一部のプラグインは、分類法を保存するためのカスタムフィールドを作成するときにデフォルトでこれを行い、保存時に用語をロードして割り当てることも選択します。
/* Example JSON config snippet for an ACF Pro Export/Import. */
/* Most likely config for most of these situations: "allow_null" */
/* and "field_type" may need to be adjusted depending on the situation. */
{
"type": "taxonomy",
"field_type": "multi_select",
"allow_null": 1,
"add_term": 1,
"save_terms": 1,
"load_terms": 1
}
コンマを付けて保存した場合でも、投稿を編集するときに、コンマを含むそれらの用語の各部分が別々の項目として表示されることがあります。この場合、デフォルトのUIを無効にしてカスタムメタボックスを使用するのが最善の方法です。これは投稿タイプを編集するときにスクリーンオプションを使って行うことができます。カスタム分類法は、登録時にクイック編集セクションから隠すこともできます。
// Register Custom Taxonomy args - disable default UI in quick edit.
$args['show_in_quick_edit'] = false;
register_taxonomy( $taxonomy, (array) $post_types, $args );
あなたはフィルタを使うことができます。
たとえば、タグクラウド内の各タグの後にカンマを追加する場合は、functions.phpに次のように入力します。
function myfunc_filter_tag_cloud($args) {
$args['smallest'] = 18;
$args['largest'] = 32;
$args['unit'] = 'px';
$args['separator']= ', ';
return $args;
}
add_filter ( 'widget_tag_cloud_args', 'myfunc_filter_tag_cloud');
これが解決策です。 2614行目に注意してください。
/**
2588 * Updates the cache for Term ID(s).
2589 *
2590 * Will only update the cache for terms not already cached.
2591 *
2592 * The $object_ids expects that the ids be separated by commas, if it is a
2593 * string.
2594 *
2595 * It should be noted that update_object_term_cache() is very time extensive. It
2596 * is advised that the function is not called very often or at least not for a
2597 * lot of terms that exist in a lot of taxonomies. The amount of time increases
2598 * for each term and it also increases for each taxonomy the term belongs to.
2599 *
2600 * @package WordPress
2601 * @subpackage Taxonomy
2602 * @since 2.3.0
2603 * @uses wp_get_object_terms() Used to get terms from the database to update
2604 *
2605 * @param string|array $object_ids Single or list of term object ID(s)
2606 * @param array|string $object_type The taxonomy object type
2607 * @return null|bool Null value is given with empty $object_ids. False if
2608 */
2609 function update_object_term_cache($object_ids, $object_type) {
2610 if ( empty($object_ids) )
2611 return;
2612
2613 if ( !is_array($object_ids) )
2614 $object_ids = explode(',', $object_ids);
2615
2616 $object_ids = array_map('intval', $object_ids);
2617
2618 $taxonomies = get_object_taxonomies($object_type);
2619
2620 $ids = array();
2621 foreach ( (array) $object_ids as $id ) {
2622 foreach ( $taxonomies as $taxonomy ) {
2623 if ( false === wp_cache_get($id, "{$taxonomy}_relationships") ) {
2624 $ids[] = $id;
2625 break;
2626 }
2627 }
2628 }
2629
2630 if ( empty( $ids ) )
2631 return false;
2632
2633 $terms = wp_get_object_terms($ids, $taxonomies, array('fields' => 'all_with_object_id'));
2634
2635 $object_terms = array();
2636 foreach ( (array) $terms as $term )
2637 $object_terms[$term->object_id][$term->taxonomy][$term->term_id] = $term;
2638
2639 foreach ( $ids as $id ) {
2640 foreach ( $taxonomies as $taxonomy ) {
2641 if ( ! isset($object_terms[$id][$taxonomy]) ) {
2642 if ( !isset($object_terms[$id]) )
2643 $object_terms[$id] = array();
2644 $object_terms[$id][$taxonomy] = array();
2645 }
2646 }
2647 }
2648
2649 foreach ( $object_terms as $id => $value ) {
2650 foreach ( $value as $taxonomy => $terms ) {
2651 wp_cache_set($id, $terms, "{$taxonomy}_relationships");
2652 }
2653 }
2654 }
2655
内部 - wp-includes/taxonomy.php 。コードをハックして頑張ってください。フックはありません。それはハードコーディングされています...すみません。今のところ、コードをハッキングすることが唯一の選択肢であると思います。