自动将自定义字段值添加到WordPress帖子

时间:2018-03-02 作者:juicebyah

我想在发布后自动添加自定义字段值,我的自定义字段名称为“quality”,值为“HD”。

我浏览了这个网站,很明显我发现的代码不起作用。到目前为止,我已经尝试了以下代码:

/* Do something with the data entered */
add_action( \'save_post\', \'myplugin_save_postdata\' );
function myplugin_save_postdata( $post_id ) {
  if ( \'page\' == $_POST[\'post_type\'] ) {
    if ( ! current_user_can( \'edit_page\', $post_id ) )
        return;
  } else {
    if ( ! current_user_can( \'edit_post\', $post_id ) )
        return;
  }

  $mydata = \'quality\'; // Do something with $mydata 

  update_post_meta( $post_id, \'HD\', $mydata );
}
还有这个代码

add_action(\'publish_page\', \'add_custom_field_automatically\');
add_action(\'publish_post\', \'add_custom_field_automatically\');
function add_custom_field_automatically($post_ID) {
    global $wpdb;
    if(!wp_is_post_revision($post_ID)) {
        add_post_meta($post_ID, \'quality\', \'HD\', true);
    }
}
按照说明操作,并将上面的代码放在我的函数中。php,什么都没有发生。自定义字段仍然为空,我在主页上查看帖子,没有任何附加值。

非常感谢。我希望我的问题足够清楚,可以理解。

2 个回复
SO网友:scytale

我想update_post_meta( $post_id, \'HD\', $mydata ); 其论点顺序错误,应update_post_meta( $post_id, \'quality\', \'HD\');

或者,如果需要自定义字段,但它不存在,为什么不使用“HD”作为默认值?e、 g。

global $post;
$theQuality = empty(get_post_meta( $post->ID, \'quality\') ? \'HD\' : get_post_meta( $post->ID, \'quality\', true); 
或者,if you can\'t get it to work on save, 然后在函数中尝试此操作。php:

function my_add_default_cf() {
  global $post;
  if ( empty(get_post_meta( $post->ID, \'quality\', true)) ) {
  // (if necessary) add additional conditional to limit which posts/pages are checked
    update_post_meta( $post->ID, \'quality\', \'HD\',true);
  }
}
add_action( \'pre_get_posts\', \'my_add_default_cf\' );
从理论上讲,每一个岗位的执行效率都很低,但事实上,处理过程很小,而且不明显。

Edit

我已删除是否已发布的检查(get_post_status( $post->ID ) == \'publish\') 根据以上代码(我的错误假设)。

Tested 适用于我的WP 4.9.4。If a post/page does not already have cust field "quality" or it has no value, then it is added as "HD" in the following circumstances:保存草稿或出版时;打开现有帖子/页面进行编辑时;预览(虽然已完成,但编辑器页面在刷新之前不会显示);当一篇没有或没有“质量”的已发布帖子被访问时。

如果您不想将此回顾性应用于以前发布的帖子,请更改if ( empty(get_post_meta( $post->ID, \'quality\', true)) ) {

if (get_post_status( $post->ID ) == \'draft\' &&  empty(get_post_meta( $post->ID, \'quality\', true)) ) {
附加测试/diagnostics (如果需要,暂时将其添加到functions.php):

function my_custfield_test($post_id) {
  global $post;
    ?>
  <meta name="mypostid" content="<?php echo $post->ID; ?>" />
  <meta name="mypoststatus" content="<?php echo get_post_status( $post->ID ); ?>" />
  <meta name="myquality" content="<?php echo get_post_meta( $post->ID,\'quality\', true); ?>" />
    <?php  
}
add_action( \'wp_head\', \'my_custfield_test\' );
然后查看实时或预览页面的HTML源以及<head>:

HTML source

Your original code我不熟悉save_post 行动可能$post_id 是否未设置?Within 您的“myplugin\\u save\\u postdata”功能:尝试添加global $post; 作为第一行;并替换所有出现的$post_id 通过$post->ID.

SO网友:juicebyah

好的,下面是我现在使用的工作片段,并验证它是否工作

function mfields_set_default_object_terms( $post_id, $post ) {
    if ( \'publish\' === $post->post_status ) {
        $defaults = array(
            \'post_tag\' => array( \'taco\', \'banana\' ),
            \'monkey-faces\' => array( \'see-no-evil\' ),
            );
        $taxonomies = get_object_taxonomies( $post->post_type );
        foreach ( (array) $taxonomies as $taxonomy ) {
            $terms = wp_get_post_terms( $post_id, $taxonomy );
            if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
            }
        }
    }
}
add_action( \'save_post\', \'mfields_set_default_object_terms\', 100, 2 );

结束

相关推荐

修改WooCommerce Storefront子主题Single.php“Related Posts”时遇到问题

我想显示过去一周发布的某个类别的帖子。我使用query_posts() 但我已经读到了这是一个多么糟糕的主意。因此,我尝试创建一个可以修改并放入functions.php 然后直接调用或通过single.php “我的孩子”主题的单个博客帖子模板。我的功能从未起过作用,希望能得到一些帮助,找出我做错了什么。function new_function() { //Arguments $args = array( \'post_t