【问题标题】:Wordpress Shortcode PHPWordpress 简码 PHP
【发布时间】:2018-07-03 19:14:27
【问题描述】:

我正在尝试在 Wordpress 中创建一个基本的短代码,以允许我在页面上运行 PHP。这是我到目前为止所拥有的,但它不起作用。建议?

想法是 [php] 在此处插入 PHP [/php']

<?php
function php_shortcode( $attr, $content = null ) {
    return '<?php' . $content . '?>';
}
add_shortcode('php', 'php_shortcode');
?>

谢谢。

【问题讨论】:

  • 您是否正在尝试执行该代码?如果是这样,那与短代码并没有真正的关系。
  • 你必须eval($content),但你可能会为剥削而敞开心扉。
  • 您是否完全了解您正在尝试做的事情的安全问题?我基本上已经尝试过 mpen 和 @digout 的想法。尽管原则上是正确的,但由于 WordPress 执行“the_content”过滤器的方式,存在重大问题。我想我有解决方法,但除非您在考虑安全问题后仍然感兴趣,否则我不会继续。

标签: php wordpress function shortcode


【解决方案1】:

很抱歉,您正在探索一个根本无法取得成功的概念。呈现简码的 PHP 不能“也”呈现代码。

【讨论】:

  • 看起来他需要 javascript 而不是我...?
  • 我对这个答案投了反对票,因为您的推理不正确。我实际上已经实现了这个并且它确实有效。除了安全问题之外,由于 WordPress 解析内容的方式,它还有其他问题。但是,这个概念本身是有效的。
【解决方案2】:

标准的短代码将过滤 PHP 标签。但是,您可以将 php 直接写入内容编辑器。在不向您提供所有不推荐的建议的情况下,您可以执行以下操作,这将允许您将 php 写入内容编辑器:

// write '<?php ... ?>' into the editor 

add_filter('the_content', 'allow_php', 9);

function allow_php($content) {
    if (strpos($content, '<' . '?') !== false) {
        ob_start();
        eval('?' . '>' . $content);
        $content = ob_get_clean();
    }
    return $content;
}

【讨论】:

  • '但是您可以将 php 直接写入内容编辑器。' - 这是真的吗?
  • 我第一次没有仔细阅读您的答案,也没有注意到您正在使用“the_content”过滤器,并且错误地尝试使用在许多情况下无法正常工作的短代码。我最终也将我的实现更改为“the_content”过滤器,但意识到这是一件显而易见的事情,有人会为此编写插件,然后我找到了。
【解决方案3】:

在考虑了一会儿之后,我意识到有一个明显的解决方案。所以,可能有人写了一个插件来做这件事,有人写了 - https://wordpress.org/plugins/inline-php/

它由大约 40 行 PHP 组成。关键的实现技巧是它不是作为一个短代码,而是作为一个“the_content”过滤器。

add_filter('the_content', 'inline_php', 0);

这是在其他 'the_content' 过滤器处理之前完成的,并且避免了我在尝试将其用作短代码时遇到的所有问题。当然,仍然存在重大的安全风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多