web-dev-qa-db-ja.com

エントリーフッターリンクのフィルタリングと修正

私は現在27の子テーマを使っています、そして 記事の下の単一の投稿ページのリンクを変更する必要があります 。彼のhrefは投稿のカテゴリに転送しています。

私はwpでフィルタするのがかなり新しいので、この場合どのフィルタを使うべきかわからない。また、私は知りたいのですが、どのように私はこれらのフィルタを見つけることができるか、どこで見つけることができますか?

1
Facegame_Cz

参照しているカテゴリリンク、つまり単一の投稿ページのコンテンツの下に表示されているカテゴリリンクには、フィルタが追加されていません。それはtwentyseventeen_entry_footer()と呼ばれる関数を通して表示されます。

テーマファイルを見ると、ファイル内の59行目に関数があります。

/wp-content/themes/twentyseventeen/inc/template-tags.php

これがtwentyseventeen_entry_footer()関数のコードです。

if ( ! function_exists( 'twentyseventeen_entry_footer' ) ) :
    /**
     * Prints HTML with meta information for the categories, tags and comments.
     */
    function twentyseventeen_entry_footer() {

        /* translators: used between list items, there is a space after the comma */
        $separate_meta = __( ', ', 'twentyseventeen' );

        // Get Categories for posts.
        $categories_list = get_the_category_list( $separate_meta );

        // Get Tags for posts.
        $tags_list = get_the_tag_list( '', $separate_meta );

        // We don't want to output .entry-footer if it will be empty, so make sure its not.
        if ( ( ( twentyseventeen_categorized_blog() && $categories_list ) || $tags_list ) || get_edit_post_link() ) {

            echo '<footer class="entry-footer">';

            if ( 'post' === get_post_type() ) {
                if ( ( $categories_list && twentyseventeen_categorized_blog() ) || $tags_list ) {
                    echo '<span class="cat-tags-links">';

                        // Make sure there's more than one category before displaying.
                    if ( $categories_list && twentyseventeen_categorized_blog() ) {
                        echo '<span class="cat-links">' . twentyseventeen_get_svg( array( 'icon' => 'folder-open' ) ) . '<span class="screen-reader-text">' . __( 'Categories', 'twentyseventeen' ) . '</span>' . $categories_list . '</span>';
                    }

                    if ( $tags_list && ! is_wp_error( $tags_list ) ) {
                        echo '<span class="tags-links">' . twentyseventeen_get_svg( array( 'icon' => 'hashtag' ) ) . '<span class="screen-reader-text">' . __( 'Tags', 'twentyseventeen' ) . '</span>' . $tags_list . '</span>';
                    }

                    echo '</span>';
                }
            }

            twentyseventeen_edit_link();

            echo '</footer> <!-- .entry-footer -->';
        }
    }
endif;

元の機能コードからわかるように、最初の行は次のとおりです。

if ( ! function_exists( 'twentyseventeen_entry_footer' ) ) :

そのため、関数がすでに存在する場合、親テーマのコードは無視されます。 WordPressの動作上の理由から、親テーマの前に、子テーマのfunctions.phpファイルが最初にロードされます。

このコードを変更するには、子テーマのfunctions.phpファイル内に自分のtwentyseventeen_entry_footer()関数をコピーまたは作成します(function_exists()行なし、および最後のendif;行なし)。

したがって、子テーマ内にtwentyseventeen_entry_footer()関数を作成することによって、これは親テーマ関数のデフォルト機能をオーバーライドします。

更新 テンプレートの上書きでこのカテゴリリンクを完全に削除するには

27のテーマsingle.phpファイルの24行目に、次のコードが表示されます。

get_template_part( 'template-parts/post/content', get_post_format() );

次に上の行で参照されているフォルダを調べます。

/wp-content/themes/twentyseventeen/template-parts/post/

さまざまな投稿フォーマットのさまざまな 'content' PHPファイルが表示されます。通常の投稿のデフォルトはcontent.phpです。

このファイルを/template-parts/post/という名前の子テーマで呼び出された新しいフォルダー内の子テーマにコピーしてから、twentyseventeen_entry_footer()関数を参照している行を削除します(lines#73-#77)。

<?php
if ( is_single() ) {
    twentyseventeen_entry_footer();
}
?>

親テーマのルートフォルダまたは/template-parts/フォルダ内のテンプレートファイルには、テンプレートの上書きを使用できます。ファイルを同じフォルダ構造の子テーマにコピーするだけです。

NB。ただし、このテーマでは、子テーマに空の/空白のtwentyseventeen_entry_footer()関数を作成するほうが簡単な場合があります。他の投稿タイプまたは投稿形式でこの関数を使用するかどうかによって異なります(他の場所で使用する場合) …….

1
Mat

私はこのパーティーに遅刻しますが、私は上記で提案された方法が推奨されていないことをちょうど見つけました。

この記事( " get_parent_theme_file_pathとget_template_directory ")およびこの記事( " get_theme_file_uriとget_theme_file_path ")を参照してください(記事に記載)。どちらもBravokeylによって書かれました。

上記のように、ポストフッターの表示は '/wp-content/themes/twentyseventeen/inc/template-tags.php'の59行目の関数 "twentyseventeen_entry_footer"によって動かされます。私を悩ませた質問は、「システムがこの機能を有効にする方法をどのようにして知っていたのか」ということでした。 #566から#586までの親の「functions.php」行を見ると、「inc」フォルダー内のすべてのファイルが「必須」であることがわかりますこれが、「twentyseventeen_entry_footer」をアクティブにするためのトリガーです。 "inc"フォルダファイルの "require"は " get_parent_theme_file_path "と呼ばれる(Vn4.7からの)新しい関数を使います。

Bravokeylは、その機能が何をするのか、そしてその理由を詳しく説明しています。含まれているファイルの制御を親から子のテーマに移動する方法の例もあります。

私の場合では、私は私の子供のテーマで新しいフォルダー(inc)を作成し、私は子供のコピーに親のtemplate-tags.phpをコピーしました。これが私のtemplate-tags.phpのコードです。それは御馳走を働かせ、提案された代替案よりもはるかに簡単で信頼性が高いです。

add_filter('parent_theme_file_path','twentyseventeen_parent_template_tags',10,2);
function twentyseventeen_parent_template_tags($path,$file){
    if('inc/template-tags.php' == $file) {
        $gsd=get_stylesheet_directory();
        $file = 'inc/template-tags.php';
        $path = $gsd."/".$file;
 }
 return $path;
}
0
Tedinoz