被要求帮助朋友在Wordpress网站上显示一些自定义数据,我想这很容易...
拥有一个包含客户数据的表。一个插件的想法是根据当前用户ID查询该表并将其作为简码吐出,以便他们可以将输出放置在任意位置。
经过大量谷歌搜索(我不是编码员)后,我得到了一些有用的东西!问题是,即使对我未经训练的眼睛来说,它看起来也像是个庞然大物,当显然有更聪明的方法时,它会重复查询...。
<?php
Plugin Name: do stuff
Description: Do site specific stuff
function spend_data() {
global $wpdb;
global $current_user;
wp_get_current_user();
$userid = $current_user->ID;
$spend = $wpdb->get_var ( "SELECT spend FROM mytable WHERE the_id=$userid");
return $spend;
}
function detail_data() {
global $wpdb;
global $current_user;
wp_get_current_user();
$userid = $current_user->ID;
$detail = $wpdb->get_var ( "SELECT detail FROM mytable WHERE the_id=$userid");
return $programs;
}
add_shortcode('spend', 'spend_data');
add_shortcode('detail', 'detail_data');
/* Stop Adding Functions Below this Line */
最佳答案
我想您可以在短代码之前触发的钩子上查询所有字段,然后将其全部存储在$current_user
中。不要忘记用正确的表名替换mytable
。
function marks_prepare_user_shortcodes () {
global $wpdb;
global $current_user;
$current_user = wp_get_current_user();
$userid = $current_user->ID;
$row = $wpdb->get_row( "SELECT * FROM mytable WHERE the_id=".$userid, ARRAY_A);
$current_user->marks_shortcodes = $row;
}
add_action( 'wp_head', 'marks_prepare_user_shortcodes');
然后您的简码更改为
function spend_data() {
global $current_user;
$spend = $current_user->marks_shortcodes['spend'];
if (!is_null($spend))
return $spend;
}
function detail_data() {
global $current_user;
$detail = $current_user->marks_shortcodes['detail'];
if (!is_null($detail))
return $detail;
}
add_shortcode('spend', 'spend_data');
add_shortcode('detail', 'detail_data');
我不确定
wp_head
是否是正确的/ best最佳选择,您可以尝试一下。我想它在所有短代码之前都会被调用。代码未经测试。附言附带一提,我认为您的额外用户数据实际上应该存储在
wp_usermeta
表中,而不是单独的表中。您将使用get_user_meta()
检索字段:https://developer.wordpress.org/reference/functions/get_user_meta/更新资料
除了上面的代码块,您还可以使用以下代码:
function mikes_data_shortcode($atts) {
global $current_user;
$atts = array_change_key_case((array)$atts, CASE_LOWER);
// override default attributes with user attributes
$actual_atts = shortcode_atts([
'field' => 'YouDidntEnterAFieldNameAsAttribute',
], $atts);
$data = $current_user->marks_shortcodes[$actual_atts['field']];
if (!is_null($data))
return $data;
}
function mikes_shortcodes_init()
{
add_shortcode('mikes_data_shortcode', 'mikes_data_shortcode');
}
add_action('init', 'mikes_shortcodes_init');
在这里使用短代码的地方:
[mikes_data_shortcode field="spend"]
要么
[mikes_data_shortcode field="detail"]