高级自定义字段代码在代码片段插件中编写时显示为纯文本.如何解决



在Wordpress上,我正在尝试使用带有高级自定义字段的代码片段添加指向单个产品页面的链接。我的代码显示为纯文本,而不是链接。

我试过这段代码:

function product_datasheet_below_summary() { ?>
    $link = get_field('datasheet');
if( $link ): 
    $link_url = $link['url'];
    $link_title = $link['title'];
    $link_target = $link['target'] ? $link['target'] : '_self';
    ?>
    <a class="button" href="<?php echo esc_url($link_url); ?>" target="<?php echo esc_attr($link_target); ?>"><?php echo esc_html($link_title); ?></a>
<?php
};
add_action( 'ocean_after_single_product_meta', 'product_datasheet_below_summary', 5 );

这行不通。我希望有一个指向数据表的链接,但它只是以明文形式打印:

$link = get_field(‘datasheet’); if( $link ): $link_url = 
$link[‘url’]; $link_title = $link[‘title’]; $link_target = 
$link[‘target’] ? $link[‘target’] : ‘_self’; ?>

后跟一个通用的方形按钮链接。

我在这里做错了什么?非常感谢您的帮助。


感谢您的建议。我没有使用代码片段,我只是创建了一个子主题并编辑了相关的.php文件,并添加了以下内容:

'

                if( $link ): 
                    $link_url = $link['url'];
                    $link_title = $link['title'];
                    $link_target = $link['target'] ? $link['target'] : '_self';
                    ?>
            <a class= "button" id="datasheet-button" href="<?php echo esc_url($link_url); ?>" target="<?php echo esc_attr($link_target); ?>"><?php echo esc_html($link_title); ?></a>
            <?php endif; ?>`

您在

第一个?>之后获得明文,因为这是一个php结束标签,并且代码片段插件不允许多个php语句,只是崩溃和转储纯文本而不是执行代码。

你需要将整个函数重写为一个php语句,并echo所有按钮html,以及html中用.分隔的php变量。一个简单的例子:

<?php 
$var = "Hello World";
echo "<p>The value of the variable is : " . $var . "</p>";
?>

您可能还需要使用更标准的 ACF get 字段构造:

$value = get_field( "text_field" );

搜索 SE 以获取更多在 php 中回显html的示例。

你的函数有点到处都是,我已经清理了它,以便在您希望它使用对象的输出中工作,而不是回显出按钮代码的多个部分。在我看来,这更容易管理,看起来更好,因为它使HTML和PHP代码尽可能分开:

function product_datasheet_below_summary() {
    $link = get_field('datasheet');
    if( $link ){
        $link_url = $link['url'];
        $link_title = $link['title'];
        $link_target = $link['target'] ? $link['target'] : '_self';
    } ob_start();?>
    <?php if($link):?>
        <a class="button" href="<?php echo $link_url;?>" target="<?php echo $link_target;?>"><?php echo $link_title;?></a>
    <?php endif;
    return ob_get_clean();
} add_action( 'ocean_after_single_product_meta', 'product_datasheet_below_summary', 5 );?>

最新更新