在代码片段插件中编写时,高级自定义字段代码显示为纯文本。怎么修?

Advanced Custom Fields code displayed as plaintext when written in Code Snippets plugin. How to fix?

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

我试过这个代码:

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,但它只是以明文形式打印:

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

后跟通用方形按钮 link。

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


感谢您的建议。我没有使用代码片段,而是创建了一个子主题并编辑了相关的 .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 );?>