从Functions.php访问插件数据

时间:2015-08-24 作者:Addzy

我正在尝试将wordpress帖子中的数据插入到新的表数据库表中,而不是WP_postmeta. 我的函数正在运行,它将插入$postid 没问题。我遇到的问题是,我需要从Marty Spellerbergs的“地址地理编码器”插件中插入纬度和经度坐标。

在插件页面上,Marty说您可以使用以下内容访问循环中的Cooridate:

<?php echo get_geocode_lng( $post->ID ); ?>
<?php echo get_geocode_lat( $post->ID ); ?>
现在我知道在函数内部。php文件,我们实际上并不在lood中,所以我尝试了很多不同的方法来访问这些数据,但我就是做不到。是否有办法编辑Marty指定的行,以便在函数中调用它们?。

这是我在这方面的多次尝试之一:

function save_lat_lng( $post_id )   
{  
    global $wpdb;  

global $post;
$custom_lat = $_POST[get_geocode_lat( $post->ID )]; 
$custom_lng = $_POST[get_geocode_lng( $post->ID )];
// Check that we are editing the right post type  
if ( \'festival-event\' != $_POST[\'post_type\'] ) 
{  
    return;  
}  

// Check if we have a lat/lng stored for this property already  
$check_link = $wpdb->get_row("SELECT * FROM lat_lng_post WHERE post_id = \'" . $post_id . "\'");  
if ($check_link != null)   
{  
    // We already have a lat lng for this post. Update row  
    $wpdb->update(   
    \'lat_lng_post\',   
    array(   
        "lat" => $custom_lat,
        "lng" => $custom_lng 
    ),   
    array( \'post_id\' => $post_id ),   
    array(   
        \'%f\',  
        \'%f\'  
    )  
    );  
}  
else  
{  
    // We do not already have a lat lng for this post. Insert row  
    $wpdb->insert(   
    \'lat_lng_post\',   
    array(   
        \'post_id\' => $post_id,  
        "lat" => $custom_lat,
        "lng" => $custom_lng
    ),   
    array(   
        \'%d\',   
        \'%f\',  
        \'%f\'  
    )   
    );  
}  
}  
add_action( \'save_post\', \'save_lat_lng\' )

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

您的语法在一些地方有点不正确。我将尝试让代码解释:

function wpse_199498_meta_to_table( $post_id, $post ) {
    // Use the second argument of our hook, which is the post object
    if ( $post->post_type !== \'festival-event\' )
        return;

    global $wpdb;

    // Don\'t need to use $_POST, just use the functions as documented
    $custom_lat = get_geocode_lat( $post_id );
    $custom_lng = get_geocode_lng( $post_id );

    $check_link = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT post_id FROM lat_lng_post WHERE post_id = %d", // Here\'s that missing comma!
            $post_id
        )
    );

    if ( $check_link ) {
        $wpdb->update(
            \'lang_lng_post\',
            array(   
                \'lat\' => $custom_lat,
                \'lng\' => $custom_lng,
            ),   
            array(
                \'post_id\' => $post_id,
            ),   
            array(   
                \'%f\',  
                \'%f\',
            ),
            \'%d\'
        );
    } else {
        $wpdb->insert(
            \'lang_lng_post\',
            array(   
                \'post_id\' => $post_id,
                \'lat\'     => $custom_lat,
                \'lng\'     => $custom_lng,
            ),   
            array(  
                \'%d\',
                \'%f\',  
                \'%f\',
            )
        );
    }
}

add_action(
    \'wp_insert_post\',            // Later than "save_post", will ensure plugin has already saved meta at this point
    \'wpse_199498_meta_to_table\',
    10,                          // Default priority
    2                            // Number of arguments
);

SO网友:Addzy

我在其他地方得到了这个答案,但我想我会分享一下,以防有人有类似的问题:

function save_lat_lng( $post_id )   
{  
    global $wpdb;  


global $post;
$custom_lat = get_geocode_lat( $post_id ); 
$custom_lng = get_geocode_lng( $post_id );
// Check that we are editing the right post type  
if ( \'festival-event\' != $_POST[\'post_type\'] ) 
{  
    return;  
}  


// Check if we have a lat/lng stored for this property already  
$check_link = $wpdb->get_row("SELECT * FROM lat_lng_post WHERE post_id = \'" . $post_id . "\'");  
if ($check_link != null)   
{  
    // We already have a lat lng for this post. Update row  
    $wpdb->update(   
    \'lat_lng_post\',   
    array(   
        "lat" => $custom_lat,
        "lng" => $custom_lng 
    ),   
    array( \'post_id\' => $post_id ),   
    array(   
        \'%f\',  
        \'%f\'  
    )  
    );  
}  
else  
{  
    // We do not already have a lat lng for this post. Insert row  
    $wpdb->insert(   
    \'lat_lng_post\',   
    array(   
        \'post_id\' => $post_id,  
        "lat" => $custom_lat,
        "lng" => $custom_lng 
    ),   
    array(   
        \'%d\',   
        \'%f\',  
        \'%f\'  
    )   
    );  
}  
}  
add_action( \'save_post\', \'save_lat_lng\', 100 );
也非常感谢@TheDeadMedic花了这么多时间来帮助我。

结束

相关推荐

Global functions on WPMU

我在一个多站点环境中工作,所有站点都是相关的。最近的许多发展都要求我将某些功能复制并粘贴到许多不同的主题文件夹中,如果我需要到处更新它们,就会出现问题。拥有全局“functions.php”文件的最佳方式是什么?我的想法是要么在themes文件夹中包含一个文件并包含它,要么创建一个插件并启用该插件。