web-dev-qa-db-ja.com

新しいクラスを追加する '続きを読む'リンクを修正

「もっと読む」リンクにクラスを追加したいです。実際に私はこれを持っています:

<?php the_content( 'Read more...' ); ?>

どの出力:

<a href="...?p=14#more-14" class="more-link">Read more…</a>

どのようにして(PHPを使用して)クラスをリンクに追加することができますか。したがって、次のように出力されます。

<a href="...?p=14#more-14" class="more-link my_new_class">Read more…</a>
4
Alvaro

何が(正確に)起こる

テンプレート内でthe_content()を呼び出すときには、パラメータなしで呼び出すことができます。つまり、この関数は両方の引数に対してデフォルトのnullをすでに持っています。 "more"リンクテキストと、 "more"リンクテキストの前のティーザーコンテンツを削除できるブール値スイッチ。

the_content()関数は内部的にget_the_content()を呼び出します(そして引数をに渡します)。その後、the_content-filterにアタッチされているすべてのコールバック関数を実行します。そのため、基本的に nothing はリンクに関連しているか、フィルタ以外のものはthe_content()内で発生します - get_the_content() 内で発生します。

そしてthe_content_more_link-フィルタがあります。

コアのフィルター

apply_filters( 
    'the_content_more_link',
    ' <a href="' . get_permalink() . "#more-{$post->ID}\" class=\"more-link\">$more_link_text</a>",
    $more_link_text
);

実行中のフィルタ

フィルタ名の後の2つの引数(1st arg)は、付属のコールバック関数内でアクセス可能な引数です。

// Example: Somewhere in core, a plugin or a theme
$output = apply_filters( 'some_filter', $arg_one, $arg_two );

// Example: Somewhere in a custom plugin
// Attach the filter: Attach filter name, callback function name, priority, number of taken args
add_filter( 'some_filter', 'wpse63748_callback_function', 10, 2 );
function wpse63748_callback_function( $arg_one, $arg_two )
{
    // Do something with Arg One = modify the output
    // You have Arg two to help you

    // Always return the first arg for filter callback functions.
    return $arg_one;
}

"more"リンクを修正する

今実際の/現実のプラグイン:

/** Plugin Name: (#63748) Modify the »more«-link. */
add_action( 'the_content_more_link', 'wpse63748_add_morelink_class', 10, 2 );
function wpse63748_add_morelink_class( $link, $text )
{
    return str_replace(
        'more-link',
        'more-link CUSTOM_CLASSES_HERE',
        $link
    );
}

CUSTOM_CLASSES_HEREを読んだ場所にクラスを追加してからプラグインディレクトリにアップロードするか、コメントPlugin Name: ...を削除してthemes functions.phpファイルで使用するだけです。

11
kaiser

元の "more ..."リンクにフィルタを追加することもできます。このコードをfunction.phpファイルに追加するだけです。

function yourtheme_content_more() {
   $link = get_permalink('');
   $new_link = '<span class="see_more"><a class="button" href="' . esc_url($link) . '">See more from this...</a></span>';

   return $new_link;
}
add_filter('the_content_more_link', 'yourtheme_content_more');
1
Sarderon

The_content_more_linkフィルタを使用してmoreリンクを完全に置き換えることができます。そこにクラスを追加するだけです。以下のコードの「custom-class」を参照してください。

function new_content_more($more) {
       global $post;
       return ' <a href="' . get_permalink() . "#more-{$post->ID}\" class=\"more-link custom-class\">Read More...</a>";
}   
add_filter( 'the_content_more_link', 'new_content_more' );
1
jb510