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

问题描述 投票:0回答:2

在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’; ?>

然后是通用的方形按钮链接。

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


谢谢你的建议。我没有使用Code Snippets,而是创建了一个子主题并编辑了相关的.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; ?>`
wordpress advanced-custom-fields code-snippets
2个回答
0
投票

您在第一个?>之后得到明文,因为这是一个php结束标记,而Code Snippets插件不允许多个php语句,只是崩溃和转储纯文本而不是执行代码。

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

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

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

$value = get_field( "text_field" );

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


0
投票

你的功能有点遍布,我已将它清理干净,以便在你想要它使用对象的输出中工作,而不是回显出按钮代码的多个部分。在我看来,这更容易管理,看起来更好,因为它保持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 );?>
© www.soinside.com 2019 - 2024. All rights reserved.