我正在尝试将标签名称与表单标题匹配,以便将正确的表单提取到当前帖子中,订阅使用当前帖子标签标记的新帖子。我每个帖子只分配了一个标签。
categories的代码工作得很好,我尝试将其转录为标记,但我担心代码中存在语法错误,因为它不起作用。
如何编写正确的代码?
add_shortcode( \'subscribe-to-tag\', function() {
global $wpdb, $post;
$the_tag = get_the_tags( $post->ID );
$tag_name = $the_tag[0]->tag_name;
$id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM wptq_forms WHERE name = \'{$tag_name}\';"));
if (is_null($id)) { return \'\'; }
return do_shortcode( \'[newsletter_form id="\' . intval( $id ) . \'"]\' );
} );
最合适的回答,由SO网友:Sally CJ 整理而成
我在您的代码中没有看到PHP语法错误(如不需要的括号),但有两个特定于WordPress的问题需要解决:
请注意wpdb::prepare()
需要一个或多个占位符(例如。%s
对于字符串和%d
,以及每个占位符的替换值。
所以在你的情况下$wpdb->prepare()
将是:
$wpdb->prepare( "SELECT ID FROM wptq_forms WHERE name = %s", $tag_name );
get_the_tags()
在成功请求时返回术语对象数组,每个对象都是WP_Term
不具有tag_name
仅限属性name
.因此$the_tag[0]->tag_name
应改为$the_tag[0]->name
.