php - 无法将 php 代码作为短代码的返回

标签 php wordpress shortcode

我需要在 wordpress 帖子中隐藏下载的 URL。我找到了一个很棒的脚本来执行此操作,但它不是插件。我已经安装了脚本并创建了一个函数来包含它。我根本不是 PHP 专家。

但是脚本有一行可以正常调用它:

<a href="<?php downloadurl('http://yourdomainname.comdownloadables.zip','veryspecials'); ?>" >Your Downloadables</a>

我无法将它直接放在帖子中,所以我试图为它制作一个简码,但我被卡住了。我的简码是:

function secshort_func($atts, $content = null) {
extract(shortcode_atts(array(
    "linkurl" => '#Download_Does_Not_Exist',
    "linktitle" => 'Download',
), $atts));
return '<a href="<?php downloadurl(' .$linkurl. ','veryspecials'); ?>" >' .$linktitle. '</a>';
}
add_shortcode( 'secdown', 'secshort_func' );

我在尝试运行它时遇到错误,通过排除过程我知道它来自返回代码的这一部分:

"<?php downloadurl(' .$linkurl. ','veryspecials'); ?>"

在互联网上搜索解决方案并尝试了所有我能想到的方法之后,我完全被卡住了。

非常感谢任何帮助 - 被困在这么小的事情上让我发疯!

最佳答案

一些观察和答案:

  1. 格式化你的代码。它使故障排除时的生活变得更加轻松。良好的缩进是巨大的(请参阅下面的代码,格式化)。
  2. 不要使用含糊不清的/缩写的函数名称。将它们键入,以便创建 self documenting code .
  3. 最好使用extract。有人说可以,但可以create confusing code这很难排除故障,因为您不知道变量来自何处。最好显式设置变量。 (在您的情况下,因为您只使用它们一次,所以最简单的方法是仅以数组形式引用它们 - $atts['link_url'])
  4. 您可以调用函数,但必须将其连接到字符串中(见下文)。您的代码(和其他答案)正在将 php 传递到字符串中,而不是调用函数并将结果传递到字符串中。

格式化代码,答案:

// Use a clearer function name.  No need for  "func", that's implied
function download_link_shortcode($atts, $content = NULL) {  
    // Declare $defaults in a separate variable to be clear, easy to read
    $defaults = array(
        "link_url"   => '#Download_Does_Not_Exist',
        "link_title" => 'Download',
    );

    // Merge the shortcode attributes
    $atts = shortcode_atts( $defaults, $atts );

    // Concatenate in the results of the `download` function call....
    return '<a href="' . downloadurl( $atts['link_url'], 'veryspecials' ) . '">' . $atts['link_title'] . '</a>';
}

add_shortcode( 'secdown', 'download_link_shortcode' );

关于php - 无法将 php 代码作为短代码的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229162/

相关文章:

php - 无法自动增加 session 值

php - WooCommerce 特色产品以及使用简码的描述

javascript - jquery slider 在 WordPress 中的 Visual Composer 自定义短代码中不起作用

php - Wordpress 短代码不起作用

php - 如何在涉及多个 get_terms() 的 WordPress 函数中返回多个值

php - 删除父级以及子级子级中的数据时,Laravel 外键约束错误

PHP - str_replace 返回原始字符串

php - 如何停止在另一个站点中镜像我的站点内容

php - Android 中仅从 PHP MySql 获取最后一行

php - 尝试生成实体时 Symfony2/Doctrine2 无效映射文件异常