最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

actions - Run a function on all posts

programmeradmin1浏览0评论

I have a function where I am counting letters in a title and adding that _product_meta_title key, everything is working fine when I am adding a new product but I have 500 products that don't have this key. So I need to run my function on all posts once.

function save_post_title_length_meta( $post_id, $post, $update ) {

/*
 * In production code, $slug should be set only once in the plugin,
 * preferably as a class property, rather than in each function that needs it.
 */
$post_type = get_post_type($post_id);

$title = get_post_field( 'post_name', $post_id );

$title_length = strlen( $title );


// If this isn't a 'product' post, don't update it.
if ( "product" != $post_type ) return;

// - Update the post's metadata.

if ( $title ) {
    update_post_meta( $post_id, '_product_title_length', $title_length );
}}

I am using this action to run my function

add_action( 'save_post', 'save_post_title_length_meta', 10, 3 );

How to run it so it will affect all my existing post on wp load, init? Any recommendations on where to start?

Thanks

I have a function where I am counting letters in a title and adding that _product_meta_title key, everything is working fine when I am adding a new product but I have 500 products that don't have this key. So I need to run my function on all posts once.

function save_post_title_length_meta( $post_id, $post, $update ) {

/*
 * In production code, $slug should be set only once in the plugin,
 * preferably as a class property, rather than in each function that needs it.
 */
$post_type = get_post_type($post_id);

$title = get_post_field( 'post_name', $post_id );

$title_length = strlen( $title );


// If this isn't a 'product' post, don't update it.
if ( "product" != $post_type ) return;

// - Update the post's metadata.

if ( $title ) {
    update_post_meta( $post_id, '_product_title_length', $title_length );
}}

I am using this action to run my function

add_action( 'save_post', 'save_post_title_length_meta', 10, 3 );

How to run it so it will affect all my existing post on wp load, init? Any recommendations on where to start?

Thanks

Share Improve this question edited Jun 13, 2019 at 20:29 Marc 7415 silver badges15 bronze badges asked Jun 13, 2019 at 18:06 WojciechWojciech 52 bronze badges 1
  • How many "product" posts do you need to edit?? – ChristopherJones Commented Jun 13, 2019 at 18:47
Add a comment  | 

1 Answer 1

Reset to default 1

Rather than hooking into init or wp_load, here is a snippet you can drop into functions.php or on a theme file. I put it behind a $_GET so that you can only hit it once and when you are ready. Something like https://domain/page/?update_post_meta

// Hide it from the public
if(isset($_GET['update_post_meta'])){

  // Let's query all of the product post_type.
  $product_args = array(
    'post_type' => 'product',
    'posts_per_page' => -1
  );
  $product_query = new WP_Query($product_args);

  while( $product_query->have_posts()): $product_query->the_post();

    $title_length = strlen($post->post_name);

    // - Update the post's metadata.
    if ( $post->post_name ) {
      update_post_meta( $post->ID, '_product_title_length', $title_length );
    }

  endwhile; 

}

If you want to run this on specific posts you have not edited already, you can update the $product_args array to have a date range in it.

Hope this helps!!

发布评论

评论列表(0)

  1. 暂无评论