从 Functions.php 访问插件数据

Posted

技术标签:

【中文标题】从 Functions.php 访问插件数据【英文标题】:Access Plugin data from Functions.php 【发布时间】:2015-08-24 09:51:56 【问题描述】:

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

在https://wordpress.org/plugins/address-geocoder/ 可以看到的插件页面上,Marty 说您可以使用这些来访问循环内的坐标:

<?php echo get_geocode_lng( $post->ID ); ?>
<?php echo get_geocode_lat( $post->ID ); ?>

现在我知道在 functions.php 文件中,我们实际上并不在其中,所以我尝试了很多不同的方法来访问这些数据,但我就是做不到。有没有办法编辑 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' )

【问题讨论】:

【参考方案1】:

如果您将 post_id 作为参数传递给函数 save_lat_lng,我认为您应该更改这两行:

$custom_lat = $_POST[get_geocode_lat( $post->ID )]; 
$custom_lng = $_POST[get_geocode_lng( $post->ID )];

$custom_lat = get_geocode_lat( $post_id ); 
$custom_lng = get_geocode_lng( $post_id );

访问该参数。

如果你想检查帖子类型,你应该改变

if ( 'festival-event' != $_POST['post_type'] )

if ( 'festival-event' != get_post_type($post_id) )

以下文档:

https://codex.wordpress.org/Function_Reference/get_post_type

PS。下次你应该粘贴插件的链接,它可以节省时间:)

--- 更新

坐标不可用 - 问题与 save_post 挂钩优先级值有关。

从插件代码中我看到更新后元的功能具有该优先级:

add_action( 'save_post', array( $this, 'save_post' ), 10, 2 );

所以要在那之后运行你的钩子,你应该设置这样的东西:

add_action( 'save_post', 'save_lat_lng', 100 );

【讨论】:

不幸的是,这没有奏效,但我很欣赏这种尝试。对不起,我会用链接编辑帖子以供将来使用 那么变量 custom_lat 和 custom_lng 的返回值是多少? 在 Wordpress 后端它们被设置为纬度和经度坐标。这些已经用在我上面给出的代码中,用于在地图上放置标记 如果您在 save_post 上使用该功能,则意味着插件尚未存储该信息,并且它们不能从功能 get_geocode_lat 和 get_geocode_lng 获得。从插件代码中,我看到更新后元的功能具有该优先级:add_action( 'save_post', array( $this, 'save_post' ), 10, 2 ); 所以在那之后运行你的钩子,你应该设置类似的东西:add_action( 'save_post', 'save_lat_lng', 100 ); 见link 在我调试时返回这个 Notice: Undefined index: 50.71081239999999 in /home/beafweb/public_html/wp-content/themes/BEAF/functions.php on line 49 Notice: Undefined index: -1.9940134999999373 in /home/beafweb/public_html/wp-content/themes/BEAF/functions.php on line 50

以上是关于从 Functions.php 访问插件数据的主要内容,如果未能解决你的问题,请参考以下文章

php WordPress:functions.php的空白插件模板

如何在functions.php中使用域获取表单数据和创建用户

php Wordpress functions.php片段使用Yoast的插件将Google Analytics跟踪添加到wp_nav_menu

php Quick Singleton类将包含在WordPress插件(或主题functions.php文件)中,它将创建一个简单的Person帖子类型并显示

在我的Wordpress主题的functions.php中添加过滤器的位置?

在functions.php文件中调用它时,Wordpress没有从数据库获取值