テーマに問題があります。
私はAgamaを使用していて、メニュー設定で "description"にチェックマークを付けましたが、テーマでは許可されていないのでフロントエンドには表示されません。
しかし、それから私はこの機能を見つけました:
function prefix_nav_description( $item_output, $item, $depth, $args ) {
if ( !empty( $item->description ) ) {
$item_output = str_replace( $args->link_after . '</a>', '<span class="menu-item-description">' . $item->description . '</span>' . $args->link_after . '</a>', $item_output );
}
return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'prefix_nav_description', 10, 4 );
それは私が説明が表示されるようにするのを助けました。しかし、私は私の説明の中で改行することはできません。改行や挿入をするたびに
をクリックして変更を保存すると、変更が再度削除されます。
だから誰もが説明が表示されるようにし、また私が追加することが可能になるという機能で私を助けることができる
説明の.
ありがとう
この振る舞いをデバッグするのに少し時間がかかりましたが、今のところすべてが明らかになっています...これが完全に意図的なものかどうかはわかりません...
そう...改行は正しくDBに格納されます。そしてwp_setup_nav_menu_item
では、与えられたメニュー項目の投稿のpost_content
列に基づいてdescriptionフィールドが埋められます。
845行目( https://core.trac.wordpress.org/browser/tags/4.9/src/wp-include/nav-menu.php#L845 )では、短縮されてフィルタ処理されています。
if ( ! isset( $menu_item->description ) ) {
/**
* Filters a navigation menu item's description.
*
* @since 3.0.0
*
* @param string $description The menu item description.
*/
$menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) );
}
そしてwp_trim_words
関数はテキストを特定の単語数にトリミングしますが、それは改行を保存しません - したがって、改行はスペースに置き換えられます。
wp_trim_words
には、その振る舞いを変更できるようにするフィルタはありません。 wp_trim_words
呼び出しをスキップすることを可能にするフィルタもありませんが、...
\n
をプレースホルダーに置き換えてから、nav_menu_description
フィルターを使用して元に戻すことができます。ユーザーがこのプレースホルダーを自分で置く必要さえない - 私たちはsave_post
filterを持つプレースホルダーでそれらを置き換えることができる:
function replace_nl_placeholder_nav_menu_description( $description ) {
return str_replace('%NL% ', "\n", $description);
}
add_filter('nav_menu_description', 'replace_nl_placeholder_nav_menu_description');
function replace_nl_with_placeholder_nav_menu_description( $post_id ) {
if ( 'nav_menu_item' !== get_post_type($post_id) ) return;
remove_action( 'save_post', 'replace_nl_with_placeholder_nav_menu_description' );
wp_update_post( array(
'ID' => $post_id,
'post_content' => str_replace("\n", '%NL% ', get_post_field('post_content', $post_id, 'raw'))
) );
add_action( 'save_post', 'replace_nl_with_placeholder_nav_menu_description' );
}
add_action( 'save_post', 'replace_nl_with_placeholder_nav_menu_description' );
そしてそれだけです。あなたのテーマの中でそのような改行を正しく表示することを忘れないでください(nl2br
など)。