3

テーマのショートコードのコーディングに問題があります。ビュー カウンター機能を使用して div を表示し、ショットコード コンテンツを URL としてリンクするコードが必要です。

view_count(); 関数はテーマファイル内で呼び出されたときに正常に動作し、実際に表示することはできましたが、the_content(); の前に表示されました。要素の下のコンテンツ内にそれが必要なときの投稿 (灰色のバー) の。

(1) ここに私が持っているものがあります:

function video_block( $atts, $content = null ) { 
    return '<div class="video-block"><span class="ViewCount"><?php the_views(); ?></span> <a class="dl-source" href="' . $content . '">Link</a></div>';
}

(2)ページの上部に両方を表示するコードは次のとおりです。

function video_block( $atts, $content = null ) { ?>
    <div class="video-block"><span class="ViewCount"><?php the_views(); ?></span> <a class="dl-source" href="<?php echo $content; ?>">Link</a></div>
<?php }

(3) このコードは、コンテンツの上にビューを表示し、正しい場所にリンクを表示します。

function video_block( $atts, $content = null ) {
    $views = the_views();
    return '<div class="video-block"><span class="ViewCount"><?php $views; ?></span> <a class="dl-source" href="<?php echo $content; ?>">Link</a></div>';
}

Wordpress フォーラムのどこかで、関数内で (エコーの代わりに) 値を返す必要があることを読みましたが、ビュー カウントが表示され、html がスキップされ、$content が吐き出されます。

問題のページへのリンクは次のとおりです: http://nvrt.me/4Qf1 (現在、ブロック #2 のコードを使用しています)

ミッドナイトオイルがなくなりました。誰かが私を助けてくれたら本当にありがたいです。


編集:

the_views(); のコードは次のとおりです。関数。反響しているのがわかりますが、returnに変更すると全く表示されません。

### Function: Display The Post Views
function the_views($display = true, $prefix = '', $postfix = '', $always = false) {
    $post_views = intval(post_custom('views'));
    $views_options = get_option('views_options');
    if ($always || should_views_be_displayed($views_options)) {
        $output = $prefix.str_replace('%VIEW_COUNT%', number_format_i18n($post_views), $views_options['template']).$postfix;
        if($display) {
            echo apply_filters('the_views', $output);
        } else {
            return apply_filters('the_views', $output);
        }
    }
    elseif (!$display) {
        return '';
    }
}
4

3 に答える 3

5

Wordpress では値を返す関数を使用することをお勧めしますが、常に可能であるとは限りません。特に、出力を直接ストリームに書き込む別の関数を呼び出す場合はそうです。

コンポーネントがその出力をストリームに直接書き込む場合、who コンポーネントを書き直したい場合を除き、その動作に対応するようにコーディングする必要があります (私はそうしません ;-) )。

この場合、the_views() 関数は実際に両方のオプションを提供します。$display パラメーターを見てコードに従うと、この関数は両方の方法で動作します。$display が True (デフォルト) に設定されている場合、関数の結果がエコーされます。$display が False に設定されている場合、出力が返されます。

したがって、2 つのオプションがあり、どちらも機能するはずです。

オプション 1、値を返す

the_views() を呼び出すときは、次のような false パラメータを渡すことに注意してください: the_views(false)

<?php

function video_block( $atts, $content = null ) { 
  return "<div class=\"video-block\"><span class=\"ViewCount\">" . the_views(false) .  "</span><a class=\"dl-source\" href=\"$content\">Link</a></div>";
}

?>

*オプション 2: 出力をエコーする *

the_views() を呼び出したときに、パラメーターが渡されないことに注意してください。

<?php

function video_block( $atts, $content = null ) { 
  echo "<div class=\"video-block\"><span class=\"ViewCount\">";
  the_views();
  echo "</span><a class=\"dl-source\" href=\"$content\">Link</a></div>";
}

?>

また、文字列を返すときは引用符をエスケープすることを忘れないでください。

于 2011-02-07T06:50:21.367 に答える
3

@BLewis 応答のコメントとしてコード ブロックを追加できませんでしたが、彼が言ったことに取り組んで、次のようにしました。

function my_shortcode() {
  ob_start();
  a_function_to_display();
  $data = ob_get_clean();
  return $data;
}
add_shortcode( 'shortcode_name', 'my_shortcode' );
于 2014-06-09T13:54:01.980 に答える