Wordpress 短代码出现在错误的位置
Wordpress Shortcodes Appear In Wrong Place
我有一个 wordpress 短代码来为我的边栏处理一些 PHP(用于自定义字段)。简码如下:
add_shortcode('my_further_information_list','my_further_information_list_func');
function my_further_information_list_func(){
$additional_info_1 = get_field( 'additional_info_1');
$additional_info_2 = get_field( 'additional_info_2');
$additional_info_3 = get_field( 'additional_info_3');
if ( $additional_info_1) {
$html = '<li>'.the_field('additional_info_1').'</li>';
}
if ( $additional_info_2) {
$html = '<li>'.the_field('additional_info_2').'</li>';
}
if ( $additional_info_3) {
$html = '<li>'.the_field('additional_info_3').'</li>';
}
return $html;
}
出于某种原因,当我使用此短代码时,它会在页面上完全错误的位置生成 html(在短代码所在的上方 div 中)。我以前没有遇到过这种情况,所以对为什么会发生这种情况有什么想法吗?
你可以看到他们出现在这里的奇怪地方:
shortcode generating in weird place...
这是主题侧边栏代码:
<?php if ( x_get_content_layout() != 'full-width' ) : ?>
<aside class="x-sidebar nano" role="complementary">
<div class="max width nano-content">
<?php if ( get_option( 'ups_sidebars' ) != array() ) : ?>
<?php dynamic_sidebar( apply_filters( 'ups_sidebar', 'sidebar-main' ) ); ?>
<?php else : ?>
<?php dynamic_sidebar( 'sidebar-main' ); ?>
<?php endif; ?>
</div>
</aside>
<?php endif; ?>
这是生成的HTML。如您所见,顶部小部件(也使用其函数引用自定义字段的短代码(但以不同的方式 - 使用循环 - 因为它引用的字段不同))工作正常,底部小部件(只是一个简单的
后跟一个按钮)。但是在中间的小部件中,简码生成 link 和 div 上方的文本,小部件应该位于...
<div id="text-8" class="widget widget_text">
<h4 class="h-widget">Related Articles</h4>
<div class="textwidget">
<p>
<ul>
<li><a href="https://www.relatedarticle1.link">Related Article 1</a></li>
<li><a href="https://www.relatedarticle2.link">Related Article 2</a></li>
<li><a href="https://www.relatedarticle3.link">Related Article 3</a></li>
</ul>
</p>
</div>
</div>
<a href="https://www.furtherinformation1.link" target="_blank">Further Information 1</a><a href="https://www.furtherinformation2.link" target="_blank">Further Information 2</a>
<div id="text-9" class="widget widget_text">
<h4 class="h-widget">Further Information</h4>
<div class="textwidget"><p><ul><li></li><li></li></ul></p></div>
</div>
<div id="custom_html-4" class="widget_text widget widget_custom_html">
<h4 class="h-widget">Feedback</h4>
<div class="textwidget custom-html-widget">
<p>Please provide feedback!<p>
<a href="" class="open-popup" title="Feedback"><button>PROVIDE FEEDBACK</button></a>
</div>
</div>
我认为你的代码应该是
add_shortcode('my_further_information_list','my_further_information_list_func');
function my_further_information_list_func(){
$additional_info_1 = get_field( 'additional_info_1');
$additional_info_2 = get_field( 'additional_info_2');
$additional_info_3 = get_field( 'additional_info_3');
$html = "<ul>";
if ( $additional_info_1) {
$html .= '<li>'.$additional_info_1.'</li>';
}
if ( $additional_info_2) {
$html .= '<li>'.$additional_info_2.'</li>';
}
if ( $additional_info_3) {
$html .= '<li>'.$additional_info_3.'</li>';
}
$html .= "</ul>";
return $html;
}
无效的 html 元素可能会导致此类行为,具体取决于您的 css。如果您需要更多帮助,请提供模板代码,或者至少提供 the_content()
周围的代码片段
编辑:the_field 与 echo get_field 相同。它不能用于构建字符串。这就是为什么你在上面使用 get_field :)
我有一个 wordpress 短代码来为我的边栏处理一些 PHP(用于自定义字段)。简码如下:
add_shortcode('my_further_information_list','my_further_information_list_func');
function my_further_information_list_func(){
$additional_info_1 = get_field( 'additional_info_1');
$additional_info_2 = get_field( 'additional_info_2');
$additional_info_3 = get_field( 'additional_info_3');
if ( $additional_info_1) {
$html = '<li>'.the_field('additional_info_1').'</li>';
}
if ( $additional_info_2) {
$html = '<li>'.the_field('additional_info_2').'</li>';
}
if ( $additional_info_3) {
$html = '<li>'.the_field('additional_info_3').'</li>';
}
return $html;
}
出于某种原因,当我使用此短代码时,它会在页面上完全错误的位置生成 html(在短代码所在的上方 div 中)。我以前没有遇到过这种情况,所以对为什么会发生这种情况有什么想法吗?
你可以看到他们出现在这里的奇怪地方:
shortcode generating in weird place...
这是主题侧边栏代码:
<?php if ( x_get_content_layout() != 'full-width' ) : ?>
<aside class="x-sidebar nano" role="complementary">
<div class="max width nano-content">
<?php if ( get_option( 'ups_sidebars' ) != array() ) : ?>
<?php dynamic_sidebar( apply_filters( 'ups_sidebar', 'sidebar-main' ) ); ?>
<?php else : ?>
<?php dynamic_sidebar( 'sidebar-main' ); ?>
<?php endif; ?>
</div>
</aside>
<?php endif; ?>
这是生成的HTML。如您所见,顶部小部件(也使用其函数引用自定义字段的短代码(但以不同的方式 - 使用循环 - 因为它引用的字段不同))工作正常,底部小部件(只是一个简单的
后跟一个按钮)。但是在中间的小部件中,简码生成 link 和 div 上方的文本,小部件应该位于...
<div id="text-8" class="widget widget_text">
<h4 class="h-widget">Related Articles</h4>
<div class="textwidget">
<p>
<ul>
<li><a href="https://www.relatedarticle1.link">Related Article 1</a></li>
<li><a href="https://www.relatedarticle2.link">Related Article 2</a></li>
<li><a href="https://www.relatedarticle3.link">Related Article 3</a></li>
</ul>
</p>
</div>
</div>
<a href="https://www.furtherinformation1.link" target="_blank">Further Information 1</a><a href="https://www.furtherinformation2.link" target="_blank">Further Information 2</a>
<div id="text-9" class="widget widget_text">
<h4 class="h-widget">Further Information</h4>
<div class="textwidget"><p><ul><li></li><li></li></ul></p></div>
</div>
<div id="custom_html-4" class="widget_text widget widget_custom_html">
<h4 class="h-widget">Feedback</h4>
<div class="textwidget custom-html-widget">
<p>Please provide feedback!<p>
<a href="" class="open-popup" title="Feedback"><button>PROVIDE FEEDBACK</button></a>
</div>
</div>
我认为你的代码应该是
add_shortcode('my_further_information_list','my_further_information_list_func');
function my_further_information_list_func(){
$additional_info_1 = get_field( 'additional_info_1');
$additional_info_2 = get_field( 'additional_info_2');
$additional_info_3 = get_field( 'additional_info_3');
$html = "<ul>";
if ( $additional_info_1) {
$html .= '<li>'.$additional_info_1.'</li>';
}
if ( $additional_info_2) {
$html .= '<li>'.$additional_info_2.'</li>';
}
if ( $additional_info_3) {
$html .= '<li>'.$additional_info_3.'</li>';
}
$html .= "</ul>";
return $html;
}
无效的 html 元素可能会导致此类行为,具体取决于您的 css。如果您需要更多帮助,请提供模板代码,或者至少提供 the_content()
周围的代码片段编辑:the_field 与 echo get_field 相同。它不能用于构建字符串。这就是为什么你在上面使用 get_field :)