如何在wordpress中导入插件的自定义字段

时间:2015-04-08 06:54:52

标签: php wordpress wordpress-plugin

我已安装插件 Yoast SEO Premium , 用这个插件有一些字段是

yoast_wpseo_metadesc,yoast_wpseo_focuskw

但我不能添加我曾经使用的:

add_post_meta($post_id, 'yoast_wpseo_metadesc',$my_post['post_excerpt']);

1 个答案:

答案 0 :(得分:2)

这个问题可能是由于几个问题,这里有一些想法:

带有“_”

的前缀元键

Yoast SEO前缀这些自定义字段条目在数据库中带有“_”。关键不是“yoast_wpseo_metadesc”而是“_yoast_wpseo_metadesc”。对于“yoast_wpseo_focuskw”来说,它实际上是“_yoast_wpseo_focuskw”。

使用update_post_meta()而不是add_post_meta()

如果该字段不存在,

Add_post_meta()可以为帖子创建自定义字段。如果存在,则不会更新它。使用update_post_meta()函数总是更好,更灵活。如果自定义字段已存在,则会更新。否则,该函数将调用add_post_meta()来创建它。 在您的情况下,可能已存在具有该名称的字段。

小心执行代码的位置

我认为我们需要有关启动add_post_meta()函数的位置的更多信息。根据具体情况,方法不同。以下是一些例子:

在单个帖子页面

如果它在您的单个页面上,您可以使用:

<?php
global $post;
update_post_meta( $post->ID, '_yoast_wpseo_metadesc', $post->post_excerpt );
update_post_meta( $post->ID, '_yoast_wpseo_focuskw', my_focus_keyword' );
?>

在function.php

将此代码放在functions.php中,它会在每个保存后的帖子中,在管理部分中执行。

<?php
// Launch the update_post_meta on post saving.
add_action( 'save_post', 'my_yoast_saved_datas' );

function my_yoast_saved_datas( $post_id, $post ) {

  // Check that your post is what you want
  if ( $_POST['post_type'] == 'post' ) {

    // Check if user can't do that
    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;
  }

  update_post_meta( $post_id, '_yoast_wpseo_metadesc',  $post->post_excerpt );
  update_post_meta( $post_id, '_yoast_wpseo_focuskw',  'my_focus_keyword');
}
?>

循环以一次更新自定义字段

在functions.php中启动一次,或将其打包到插件上,以便在激活时启动。

<?php
global $post;

// Array of args, change to your need
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status'=> 'publish' );

// Get alls posts
$my_posts = get_posts( $args );

// Loop on post
foreach ( $myposts as $post ) {
  setup_postdata( $post );
  global $post;

  // Update on create custom fields
  update_post_meta( $post->ID, '_yoast_wpseo_metadesc',  $post->post_excerpt );
  update_post_meta( $post->ID, '_yoast_wpseo_focuskw',  'my_focus_keyword');
}

wp_reset_postdata();
?>