web-dev-qa-db-ja.com

カスタムWordpressのテーマ:投稿の日付と表示日を並べて表示する

現在行われているのは、「更新」時間がある投稿の場合、元の公開日と編集者日が並んでレンダリングされていることです(その間に余分な情報がなく、さらにそのためのスペースさえありません)。私はこれを直すべきです。 この出力コードを探すファイル、または可能であればWordを追加する方法に関するガイダンスが必要です。 2つの日付の間にテーマは_Sに基づいています - これは私が私の希望するページがどこにあるかわからない理由を説明します、そしてこの問題はあなたが日付を見ることができるテーマのどの領域にも続きます(ブログ、検索結果、実際の投稿)。

CSSで日付の1つを隠すこともできますが、最新の更新日を確実に表示したいので、複雑で不要なCSSを使って日付を隠すというジレンマがあります。 (私は、リンク表示をnoneに設定することを考えています。それで、最後の子の表示をtrueに設定しますが、ブラウザの互換性には打撃を与えます、そしてそれは私にとって非常に難しいとは思えません)。

Demo Of Problem

1
Adam

彼らのコメントでボールを転がしてくれたRachieVeeに感謝します。

私はこれを行う方法を考え出したので、私は他の人による将来の参考のためにそれを文書化することも同様に良いと思いました。ちなみに、これは_ Sテーマ、またはその開始テンプレートから派生した任意のテーマにのみ関係します。

それで、この "二重日付"を修正するのに約5分かかります - content.phpファイルをチェックした後、メタ出力がどこにあるかを<?php my_underscores_theme_name_posted_on(); ?>で見つけました日時情報については。少し掘り下げた後、my_underscores_theme_name.potファイルにアクセスしました。そして257行目から260行目で、次の情報が書き込まれました。

#: inc/template-tags.php:82
msgctxt "post date"
msgid "Posted on %s"
msgstr ""

私はこれが私が必要としているものだと推論しました、それでもそれはまだあまりにも制限的でした。そこで私は82行目で参照されるphpファイル(inc/template-tags.php)に入り、そのように変更しました(あなたの場合はleague_of_legends_riftをあなたのテーマの名前に置き換えてください)。

if ( ! function_exists( 'league_of_legends_rift_posted_on' ) ) :
/**
 * Prints HTML with meta information for the current post-date/time and author.
 */
function league_of_legends_rift_posted_on() {
    $time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time>';
    $time_string = $time_string;
    if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
        $time_string2 = ', last updated on ';
        $time_string2 .= '<time class="updated" datetime="%1$s">%2$s</time>';
    }

    $time_string = sprintf( $time_string,
        esc_attr( get_the_date( 'c' ) ),
        esc_html( get_the_date() )
    );
    $time_string2 = sprintf( $time_string2,
        esc_attr( get_the_modified_date( 'c' ) ),
        esc_html( get_the_modified_date() )
    );

    $posted_on = sprintf(
        _x( 'Posted on %s', 'post date', 'league-of-legends-rift' ),
        '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . $time_string . '</a>'.$time_string2
    );

    $byline = sprintf(
        _x( 'by %s', 'post author', 'league-of-legends-rift' ),
        '<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . esc_html( get_the_author() ) . '</a></span>'
    );

    echo '<span class="posted-on">' . $posted_on . '</span><span class="byline"> ' . $byline . '</span>';

}
endif;

これは以前は少し違って見えましたが、元の発行日と更新日が互いに追加された1つの変数($ time_string)でさらに要約されています。すでに存在しているロジックを使用して、2番目の変数$ time_string2を導入しました。これは、更新された日付のフレーズと情報を格納するために使用していました。それから私はこの新しい変数と私が欲しかったフォーマットを含むように$ posts_onを修正しました - あなたがこの追加出力を編集するためにあなたは今このphpファイルからそれをしなければなりません。

それが私を助けてくれたのと同じくらいあなたが助けてくれたことを願っています!

1
Adam