2016-05-31 12 views
-1

私はページコンテンツにトークンを追加してページに挿入するWordPressプラグインを開発しています。WordPressのエントリコンテンツ全体を置換する

このページには、以下のプラグインの内容を紹介するテキストがいくつかあります。ポストバックでは、入門用のテキストをクリアして、プラグインからの出力を表示したいと思います。

私は$(".entry-content").html("plugin output");の内容を置き換えてjQueryを使ってこれを行うことができますが、代わりにこれを行うためのWordPressネイティブメソッドがあるかどうか尋ねたいと思っていました。

UPDATE

以下では、プラグインからのファイルの1つです。私がにしたいPOST(の場合はの場合)には、をページ内容に置き換え、その出力を出力します。 GET(elseの条件)私はちょうどに、の内容をコンテンツに出力したいと思っています。

<?php 
    /* 
     The following code utilizes Heredoc syntax. 
     It is very important to note that the line with the closing identifier must contain no other characters, except a semicolon (;). 
     That means especially that the identifier may not be indented, and there may not be any spaces or tabs before or after the semicolon. 
     It's also important to realize that the first character before the closing identifier must be a newline as defined by the local operating system. 
     This is \n on UNIX systems, including Mac OS X. 
     The closing delimiter must also be followed by a newline. 
    */ 
    class WHRFContactUs { 
     function GenerateContactUsForm() { 
      if ($_SERVER['REQUEST_METHOD'] == 'POST') 
      { 
       $sendgrid = new SendGrid($GLOBALS['MailAPIKey']); 
       $email = new SendGrid\Email(); 
       $email 
        ->addTo($GLOBALS['MailAPISender']) 
        ->setReplyTo($_POST['Email']) 
        ->setFrom($GLOBALS['MailAPISender']) 
        ->setSubject($_POST['Subject']) 
        ->setHtml($_POST['Message'] . '<br /><hr/>' . $_POST['FullName'] . '&nbsp;&nbsp;' . '(<a href="mailto:' . $_POST['Email'] . '">' . $_POST['Email'] . '</a>)<br/>' . '<br />') 
       ; 

       try 
       { 
        $sendgrid->send($email); 
        $html = <<<HTML 
        Your message has been successfully sent. Thank you for taking the time to provide us your feedback. 
        <br/><br/> 
        In the event that your feedback requires a response, a representative will contact you as soon as possible. 
HTML; 
       } 
       catch(\SendGrid\Exception $ex) 
       { 
        echo $ex->getCode(); 
        foreach($ex->getErrors() as $er) { 
         echo $er; 
        } 
       } 
      } 
      else 
      { 
       $html = <<<HTML 
       <form method="post" id="ContactUsForm" action="{$_SERVER['REQUEST_URI']}"> 
        <div class="form-group"> 
         <label for="FullName" class="sr-only">Your full name</label> 
         <input type="text" class="form-control" id="FullName" name="FullName" placeholder="Your full name" data-validation-required="Please enter your full name."> 
        </div> 
        <div class="form-group"> 
         <label for="Email" class="sr-only">Your email address</label> 
         <input type="email" class="form-control" id="Email" name="Email" placeholder="Your email address" data-validation-required="Please enter your email address." data-validation-format="Please enter a valid email address."> 
        </div> 
        <div class="form-group"> 
         <label for="Subject" class="sr-only">Subject</label> 
         <input type="text" class="form-control" id="Subject" name="Subject" placeholder="Subject" data-validation-required="Please enter a subject."> 
        </div> 
        <div class="form-group"> 
         <label for="Message" class="sr-only">Message</label> 
         <textarea class="form-control" id="Message" name="Message" placeholder="Your message..." data-validation-required="Please enter a message." rows="4"></textarea> 
        </div> 
        <button type="submit" id="ContactUsFormSubmit" name="ContactUsFormSubmit" class="btn btn-primary">Send message</button> 
       </form> 
       <script type="application/javascript" src="{$GLOBALS['WHRFPluginPath']}scripts/whrf-contact-us.js"></script> 
HTML; 
      } 
      return $html; 
     } 
    } 

    add_shortcode('ContactUsForm', array('WHRFContactUs','GenerateContactUsForm')); 
?> 
+1

the_content'フィルタ –

+1

最初にコンテンツを出力するコードがわからないと、何をする必要があるかわからなくなります。 – rnevius

+1

以下の2つの答えがあり、すべてのコメントを無視した場合、賞品を提供するポイントはあまりありません。 – David

答えて

1

コメントに記載されているように、どのようにコンテンツが追加されているかわからないと、それを置き換える方法を知ることは実際には不可能です。

チャンスがコンテンツフィルタthe_contentを使用して追加されていることを、次のとおりです。

はしかし、非常に破壊的で無分別な方法でそれを達成する可能性があります。 したがって、コンテンツに対して優先度の高い変更を混乱させてから、そのフィルタを削除して他のコンテンツの追加を停止することができます。

function my_disruptive_filter($content) { 

    remove_all_filters('the_content'); 

    return 'my custom content'; 
} 
add_filter('the_content', 'my_disruptive_filter', -999, 1); 

私はそれを試したことがないので、これが動作するかどうかは100%確信していません。

また、remove_all_filtersは、オプションである$priorityという2番目のパラメータを取ります。 forループを使用して、このフックで使用しているものよりも低いすべての優先順位をターゲットにすることができます。しかし、私はそのパラメータを指定せずにすべてのパラメータを削除すると仮定します。


これは非常に破壊的である理由は、それがそのフィルタを使用してから他のコードを防止することである

警告。別の開発者(またはあなた自身さえも)は、ある時点で後でそのフィルタを使用したいと思うかもしれません。脱出するのは非常に難しい状況になる可能性があります。

また、既存のプラグインテーマでコンテンツが追加されない可能性があります。

注:このコンテンツはどのように追加されているかによって決まります。

+0

間違いなく推奨されますが、すっきりした解決策です! – rnevius

0

あなたは、あなたは(テーマのディレクトリにある通常page.php/single.php)ですどんなページでは、この行を削除する必要があり、独自のプラグインを使用して、これを上書きする場合に、ページの内容を返すthe_content()機能あなたカスタムプラグインの出力。

+0

これは与えられた情報に基づいて最も正確な答えです。 – David

+0

確かに、@ダビッドは言った、なぜdownvote ..? –

関連する問題