web-dev-qa-db-ja.com

カスタム投稿の抜粋が正しく機能しない

欲しいもの

さまざまな種類の抜粋を表示する必要があります。一部の項目には「もっと読む」ボタンの種類が必要なものもあれば、別の種類のボタンが必要なものもあります。同じことが抜粋の長さにも言えます。

私が抱えている問題

今のところ、両方のタイプの抜粋に完全な抜粋が表示されていて、「もっと読む」ボタンが完全になくなっています。

コード

カスタム抜粋長さ関数:

function custom_excerpt_long($length) {
   return 100;
}

function custom_excerpt_short($length) {
   return 30;
}

カスタム抜粋「もっと読む」ボタン機能:

function custom_continuereading($more) {
   global $post;
   return '... &mdash; <a class="view-article" href="' . get_permalink($post->ID) . '">Continue reading</a>';
}
function custom_readmore($more) {
   global $post;
   return '... &mdash; <a class="view-article" href="' . get_permalink($post->ID) . '">Read more</a>';
}

カスタム抜粋コールバック関数:

function custom_excerpt($length_callback = '', $more_callback = '') {
   global $post;

   if (function_exists($length_callback)) {
      add_filter('excerpt_length', $length_callback);
   }
   if (function_exists($more_callback)) {
      add_filter('excerpt_more', $more_callback);
   }

   $output = get_the_excerpt();
   $output = apply_filters('wptexturize', $output);
   $output = apply_filters('convert_chars', $output);
   $output = '<p>' . $output . '</p>';
   return $output;
}

抜粋を印刷するためのコード:

<?php echo custom_excerpt('custom_excerpt_long', 'custom_continuereading'); ?>
<?php echo custom_excerpt('custom_excerpt_short', 'custom_readmore'); ?>

何がおかしいのですか?ご協力ありがとうございました。


UPDATE - ワーキングソリューション

D.Danの答えで、私は別の解決策を求めました。これが最後の機能です。

function custom_excerpt($length = '') {
   global $post;

   $output = get_the_excerpt();
   $output = apply_filters('wptexturize', $output);
   $output = apply_filters('convert_chars', $output);
   $output = substr($output, 0, $length);
   $output = '<p>' . $output . '... <br><br> <a class="view-article" href="' . get_permalink($post->ID) . '">Continue reading</a></p>';
   return $output;
}

そして私はこのように関数を呼び出すことができます:

<?php echo custom_excerpt(100); ?>
1
ismaelw

なぜ substr を使わないのですか?

短縮された抜粋を返す関数の例:

function shortened_excerpt() {

    echo substr(get_the_excerpt(), 0, 30) . "...";

}
0
D. Dan