我在名为“信念”(由Chimpstudio编写)的主题中遇到了一个奇怪的错误。当用户发布或更新页面时,PayPal链接无法正确写入数据库。
据我所知,写入数据库的值包含在XML数组中,如下所示:
noSimpleXMLElement Object ( [0] => https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick )
在单击“发布/更新”之前,应该发布/更新的链接是:
https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id = XXXXXXXXXXXXX
“ &hosted_button_id = XXXXXXXXXXXXX ”未保存,这意味着用户无法购买我的客户的产品。
可能的解决方案:我一直在研究主题的.php文件,寻找机会拦截传递给WordPress数据库的值。这个想法是在将变量发送到WP数据库之前对其进行包装/编码,希望整个URL字符串在URL的“ &hosted_button_id = XXXXXXXXXXXXX ”部分保持不变。
有什么解决方案或想法可能会有所帮助吗?
编辑:这可能是来自admin_functions.php文件的相关代码:
function events_meta_save($post_id) {
global $wpdb;
if (empty($_POST["event_ticket_price"])){ $_POST["event_ticket_price"] = "";}
if (empty($_POST["event_social_sharing"])){ $_POST["event_social_sharing"] = "";}
if (empty($_POST["event_buy_now"])){ $_POST["event_buy_now"] = "";}
if (empty($_POST["event_phone_no"])){ $_POST["event_phone_no"] = "";}
if (empty($_POST["switch_footer_widgets"])){ $_POST["switch_footer_widgets"] = "";}
if (empty($_POST["event_start_time"])){ $_POST["event_start_time"] = "";}
if (empty($_POST["event_end_time"])){ $_POST["event_end_time"] = "";}
if (empty($_POST["event_all_day"])){ $_POST["event_all_day"] = "";}
if (empty($_POST["event_address"])){ $_POST["event_address"] = "";}
if (empty($_POST["event_ticket_options"])){ $_POST["event_ticket_options"] = "";}
if (empty($_POST["event_map"])){ $_POST["event_map"] = "";}
$sxe = new SimpleXMLElement("<event></event>");
$sxe->addChild('event_ticket_price', $_POST['event_ticket_price'] );
$sxe->addChild('event_social_sharing', $_POST["event_social_sharing"]);
$sxe->addChild('event_buy_now', $_POST["event_buy_now"]);
$sxe->addChild('event_phone_no', $_POST["event_phone_no"]);
$sxe->addChild('switch_footer_widgets', $_POST["switch_footer_widgets"]);
$sxe->addChild('event_start_time', $_POST["event_start_time"]);
$sxe->addChild('event_end_time', $_POST["event_end_time"]);
$sxe->addChild('event_all_day', $_POST["event_all_day"]);
$sxe->addChild('event_ticket_options', $_POST["event_ticket_options"]);
$sxe->addChild('event_address', $_POST["event_address"]);
$sxe->addChild('event_map', $_POST["event_map"]);
echo "<pre>BPOST: ".print_r($_POST, true)."</pre>";
print_r($sxe);
$sxe = save_layout_xml($sxe);
print_r($sxe);
update_post_meta($post_id, 'cs_event_meta', $sxe->asXML());
}
此外,这是来自events.php文件的XML方面的更多代码:
// event custom fields start
add_action( 'add_meta_boxes', 'cs_event_meta' );
function cs_event_meta()
{
add_meta_box( 'event_meta', 'Event Options', 'cs_event_meta_data', 'events', 'normal', 'high' );
}
function cs_event_meta_data($post) {
$cs_event_meta = get_post_meta($post->ID, "cs_event_meta", true);
global $cs_xmlObject;
if ( $cs_event_meta <> "" ) {
$cs_xmlObject = new SimpleXMLElement($cs_event_meta);
$event_ticket_price = $cs_xmlObject->event_ticket_price;
$event_social_sharing = $cs_xmlObject->event_social_sharing;
$event_start_time = $cs_xmlObject->event_start_time;
$event_end_time = $cs_xmlObject->event_end_time;
$event_all_day = $cs_xmlObject->event_all_day;
$event_address = $cs_xmlObject->event_address;
$event_loc_lat = $cs_xmlObject->event_loc_lat;
$event_loc_long = $cs_xmlObject->event_loc_long;
$event_loc_zoom = $cs_xmlObject->event_loc_zoom;
$testVar = $cs_xmlObject->event_buy_now;
if (strstr($cs_xmlObject->event_buy_now, "&"))
{
echo "yes"; //$event_buy_now = ($cs_xmlObject->event_buy_now . 'FINDME(yes)');
print_r ($testVar);
}
else
{
echo "no"; //$event_buy_now = ($cs_xmlObject->event_buy_now . 'FINDME(no)');
print_r ($testVar);
print_r ($cs_xmlObject);
}
$event_ticket_options = $cs_xmlObject->event_ticket_options;
$event_map = $cs_xmlObject->event_map;
}
else {
$event_ticket_price = '';
$slider_id = '';
$event_social_sharing = '';
$event_related = '';
$event_start_time = '';
$event_end_time = '';
$event_all_day = '';
$event_address = '';
$event_loc_lat = '';
$event_loc_long = '';
$event_loc_zoom = '';
$inside_event_related_post_title = '';
$event_map = '';
$event_buy_now = '';
$event_ticket_options = '';
}
注意:这两个代码段都位于父主题的/ include /目录中。此时,尚无子主题-如有必要,将创建子主题来实施这些更新。
只需使用jQuery和.change()即可检测输入中的新内容。字段更改后,将&更改为&amp;。可能是一个肮脏的技巧,但是如果这介于您和发薪日之间,那就去吧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句