我正在开发一个WordPress插件,它通过向页面内容添加一个标记插入页面。
因此,在页面上有一些介绍文本,其中包含以下插件的内容。在回发时,我想清除介绍性文本,只显示插件的输出。
我知道我可以通过替换$(".entry-content").html("plugin output");
的内容使用jQuery来做到这一点,但我想问一下是否有一个WordPress本机方法来代替。
更新
以下是插件中的一个文件。它是POST( if 条件)我想要替换页面内容,以及函数的输出。在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'] . ' ' . '(<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'));
?>
答案 0 :(得分: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
的第二个参数,这是可选的。您可以通过for
循环定位所有优先级低于使用此挂钩的优先级。但我假设没有提供该参数,它只会删除所有参数。
警告强>
这是非常具有破坏性的原因是它会阻止任何其他代码使用该过滤器。另一个开发人员(甚至你自己)可能希望稍后在某个时候使用该过滤器,它将无法工作,你不知道为什么。离开可能是一个非常困难的情况。
此外,这可能会阻止现有插件主题添加其内容,因此如果您最终使用并查看缺少的内容 - 原因可能就是这样。
注意:这确实是一个成功的解决方案,因为它取决于内容的添加方式。
答案 1 :(得分:0)
函数the_content()
返回页面内容,如果你想用你自己的插件覆盖它,你应该在你的任何页面中删除这一行(通常是主题目录中的page.php / single.php)自定义插件输出。