1

ここにいくつかのコードがありますが、それが問題を引き起こしています。

    function rcMetaDisplayNone($content)
    {
        global $rc_options;
        global $post;
        global $login_button;

    $rcUserLevel = get_post_meta($post->ID, 'rcUserLevel', true);

    if (!current_user_can('read') && ($rcUserLevel == 'Administrator' || $rcUserLevel == 'Editor' || $rcUserLevel == 'Author' || $rcUserLevel == 'Contributor' || $rcUserLevel == 'Subscriber'))
    {
        $userLevelMessage = strtolower($rcUserLevel);
        return do_shortcode( $rc_options[$userLevelMessage . '_message'] );
    }
    else
    {
        // return the content unfilitered
        return $content;
    }
}

ここで克服しようとしているタスクは、次のようechoにステートメントの最後に an を追加する方法です。if

return do_shortcode( $rc_options[$userLevelMessage . '_message'] );
echo $login_link;

さて、PHPがどのように機能するかのルールにより、これは機能しないことを理解しています。私の質問は次のとおりです。どうすればそれを機能させることができますか? これを可能にする機能または回避策はありますか?

私はPHPの初心者なので、解決策が明らかである場合は申し訳ありません。

**アップデート**

聖なる答え、バットマン!助けてくれてありがとう、皆さん。明確にする必要があります。関数全体を含めるようにコードを更新しました。

$login_linkコードは基本的に、ユーザーがログインできるようにするリンクを出力しています (皮肉なことに)。ただし、returnコードは、私が使用しているこのWordPress プラグインに関連して、ユーザーがページのコンテンツにアクセスする権限を持っていないことを示すメッセージを出力しています。

ここにジレンマがありますか?このメッセージにログイン リンクを追加しようとしています。これは単なる空の戻り値ではなく、ブラウザに出力される実際のメッセージです

**更新 2**

これは私が使用しているショートコードなので、このコードを関数の外に出力できるかどうかはわかりません。

4

5 に答える 5

3

returnステートメントの後でコードを実行することはできません(関数が戻る)。

私があなたの問題を正しく理解していれば (実行do_shortcode()して の値を表示して$login_linkから戻る)、次のようになります: 戻り値を保存し、 を呼び出しecho、最後に保存された値を返します。

$returnValue = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
echo $login_link;
return $returnValue;

編集:更新に基づいて、次のものを探していると思います:

$returnValue = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
return $returnValue . $login_link;
于 2013-03-20T16:20:17.833 に答える
2

関数の外でエコーします。経験則では、関数内で決してエコーしないでください。常に出力を返し、戻り値セットをエコーし​​ます

だからあなたはするだろう

<?php 
$echovar = rcMetaDisplayNone($content);

echo $echovar;

?>

完全なコードを使用して更新する

<?php

function rcMetaDisplayNone($content)
    {
        global $rc_options;
        global $post;
        global $login_button;

    $rcUserLevel = get_post_meta($post->ID, 'rcUserLevel', true);
    $staticstring = "<a href=\"blah.php\">THIS IS MY STATIC STRING IT CAN CONTAIN ANYTHING</a>";

    if (!current_user_can('read') && ($rcUserLevel == 'Administrator' || $rcUserLevel == 'Editor' || $rcUserLevel == 'Author' || $rcUserLevel == 'Contributor' || $rcUserLevel == 'Subscriber'))
    {
        $userLevelMessage = strtolower($rcUserLevel);
        $output = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
    }
    else
    {
        // return the content unfilitered
        $output = $content;
    }
    return $output.$staticstring;
}

echo rcMetaDisplayNone($content);
?>
于 2013-03-20T16:20:27.883 に答える
2

これは単なる PHP ではなく、関数がどのように動作するかのルールです。areturnがヒットすると、関数は実行されます。これは、 の後にさらに行がある場合でも同様ですreturn

Function test(){
  echo "test";
  return;
  echo "done";
}

"test"リターンがヒットしたのでこれだけ出力します。何かをしたい場合は、関数が終了したときではなく、関数が終了する前に実行する必要があります。

echo $login_link;
return do_shortcode( $rc_options[$userLevelMessage . '_message'] );

したがって、戻る前に変数をエコーアウトできます。

編集: 探しているのは の後do_shortcodeにメッセージに追加することなので、返す前に文字列を連結できます。そのようです:

$shortcode = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
return $shortcode."possible HTML".$login_link;

「可能な HTML」は、任意の文字列または書式設定にすることができます。リサーチPHP String Concatenation

于 2013-03-20T16:21:05.333 に答える
0

意味がありません。に移動するだけですreturn

echo $login_link;
return do_shortcode( $rc_options[$userLevelMessage . '_message'] );

あなたが実際に何をしたいのかについてもっと多くのアイデアを私たちに与えてくれれば、より意味のあるものになるかもしれません (「値を出力する」よりも抽象度の低い方法で)。

于 2013-03-20T16:20:43.510 に答える
0

できません。Return は機能を終了します。必要なものを返し、関数を呼び出す場所で echo を使用できます。

echo rcMetaDisplayNone($someParam);

さらに必要な場合は、値の配列を返すことができます。

$returned = rcMetaDisplayNone($someParam);
echo $returned['echoVal'];
于 2013-03-20T16:22:28.863 に答える