php - WordPress 主题正在消除我的 PayPal 购买链接的符号和之后的所有文本

标签 php xml wordpress paypal ampersand

我在名为“Faith”(由 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, "&amp;"))
            {
                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() 来检测输入中的新内容。更改字段时,将 & 更改为 &可能是一个肮脏的黑客,但如果这是你和发薪日之间的障碍,那就去吧。

关于php - WordPress 主题正在消除我的 PayPal 购买链接的符号和之后的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452330/

相关文章:

php - 使用 functions.php 将 Bootstrap 排队到 Wordpress

java - 解析xml找到根标签,然后将标签附加到根标签下

xml - 增加 VXML 中的计数器

php - WordPress Multisite 可以支持数万/数十万个站点吗?

php - ZF2 应用中的 Doctrine ORM 缓存

php - 在 Laravel 中将数组的第一个字母设为大写

java - 根据 java 中其他元素的内容跳过特定元素的 XSD 验证

php - WordPress 管理员用户不应登录到 WooCommerce 帐户页面

php - 如何将自定义 HTML 类名称添加到管理屏幕子菜单项?

php - 列连接返回 "Null"Mysql - Php