web-dev-qa-db-ja.com

Functions.phpからクラス名コメントテンプレートを追加します

Functions.phpに記述されている私のcomment template(投稿自体の前のdivラッパー)にクラス名を追加したいと思います。 functions.phpのクラス名は私のユーザーのプロフィールセクションの追加のフィールドであり、私はその文字列を取得して私のコメントテンプレートの追加のクラス名として追加したいと思います。

追加したいこと:$cityofuser->user_city

問題は、どうすればよいのかということです。テンプレートで$classes[] = 'comment-author-' . sanitize_html_class(echo $cityofuser->user_city);を使ってもうまくいきません。 syntax error, unexpected 'echo'のようなエラーが出ます

編集:

私の登録フォームでは、人々は彼らが住んでいる都市を述べる新しいフィールドに情報を追加することができます。私はこのフィールドの出力を取得したい、コメントテンプレートの新しいクラス名にしたいこのクラス名で。それで私が(functions.phpに)作ってレジスタページに追加したcustom field echo $cityofuser->user_cityは私のサイト全体で使いたいものです。

ここに新しいクラス名を追加したいです。<div id="comment-5" class="comment byuser comment-author-admin even thread-odd thread-alt depth-1">

そしてこれが行われた後、また投稿に。それはget_post_author?=cityofuser=Montrealか何かのようなものでなければなりません、しかし私はそれをする方法の手がかりを持っていません。

1
Siyah

あなたのテーマであれば、 comment_class()post_class() フィルタにフックすることを検討するべきですそれをサポートしています。

comment_classフィルタを使う:

以下のフィルタを追加することができます。

/**
 * Add a custom comment class, based on a given comment author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'comment_class', function( $classes, $class, $comment_id, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $comment = get_comment( $comment_id );

    // Check if the comment author is a registered user:
    if ( ! is_null( $comment ) && $comment->user_id > 0 )
    {
        // Check for the custom user meta:
        if( '' !== ( $value = get_user_meta( $comment->user_id, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );
    }

    return $classes;
}, 10, 4 );

出力例:

<li class="comment byuser comment-author-someuser bypostauthor 
           odd alt depth-2 reykjavik" id="li-comment-78">
    <article id="comment-78" class="comment">

与えられたコメントの作者に対して、reykjavikcityユーザーメタとして追加されています。

post_classフィルタを使う:

post_classフィルタについても同様に使用できます。

/**
 * Add a custom post class, based on a given post author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'post_class', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $post = get_post( $post_id );

    if( ! is_null( $post ) && $post->post_author > 0 )
    {
        // Check for the custom user meta:
        if( '' !== ( $value = get_user_meta( $post->post_author, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );

    }

    return $classes;
}, 10, 3 );

これは、ループ内で機能する短いバージョンです。

/**
 * Add a custom post class, based on a given post author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'post_class', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Check for the custom user meta:
    if( '' !== ( $value = get_the_author_meta( $key ) ) )
        $classes[] = sanitize_html_class( $value );

    return $classes;
});

出力例:

<article id="post-1" 
         class="post-1 post type-post status-publish format-standard 
                hentry category-uncategorized reykjavik">

上記のフィルタに基づいて、最後の投稿クラスとしてreykjavikが追加されています。

3
birgire