Получить идентификатор сообщения, которое вы редактируете в WordPress. - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить идентификатор поста, который я редактирую, в functions.php с целью динамического переписывания слага пользовательского типа поста.

Это то, с чем я работаю до сих пор.

function change_post_type_slug( $args, $post_type ) {

  if ( 'custom_post' == $post_type ) {

    global $post;
    $location = get_field('custom_field', $post->ID);
    $args['rewrite']['slug'] = $location;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

Я не уверен, срабатывает ли хук register_post_type_args до того, как я смогу получить удостоверение личности, или это даже лучший способ выполнить то, что я пытаюсь выполнить.Не могу найти там много информации по этому вопросу.

Мне удалось заставить его работать со следующим:

function change_post_type_slug( $args, $post_type ) {

  if ( 'lead_page' == $post_type ) {

    $post_id = $_GET['post'];
    $location = get_field('leadpage_location', $post_id);
    $args['rewrite']['slug'] = $location->post_name;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

Однако это привело к уведомлению на внешнем интерфейсе:Notice: Undefined index: post in /path/to/wordpress/functions.php on line 623

Строка 623 - $post_id = $_GET['post'];

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Для этого следует использовать хук updated_postmeta, так как он запускается каждый раз, когда вы обновляете свои настраиваемые поля.

Затем вы можете обновить свои данные поста с помощью wp_update_post() функция.

add_action( 'updated_postmeta', function( $meta_id, $object_id, $meta_key, $meta_value ) {

    if ( 'location' === $meta_key ) {
        wp_update_post([
            'ID' => $object_id,
            'post_name' => $meta_value,
        ]);
    }

}, 10, 4 );
0 голосов
/ 28 февраля 2019

Попробуйте:

function change_post_type_slug( $args, $post_type ) {

  if ( 'lead_page' === $post_type && is_admin() && $_GET['action'] === 'edit' ) {

    $post_id = $_GET['post'];
    $location = get_field('leadpage_location', $post_id);
    $args['rewrite']['slug'] = $location->post_name;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

Добавлены еще два условия, чтобы проверить, находитесь ли вы на экране администратора, и проверить, есть ли параметр GET, равный edit.Вероятно, слишком много, чтобы сделать is_admin(), но теперь вы в супер безопасности.

0 голосов
/ 28 февраля 2019

Обновление:

Попробуйте это:

function change_post_types_slug( $args, $post_type ) {

   if ( 'your-custom_post' === $post_type ) {
        // Check and get the custom post ID 
        $id = isset($_GET[ 'post' ]) ? $_GET[ 'post' ] : '' ;
        // $location = get_field('leadpage_location', $id);
        $args['rewrite']['slug'] = 'new-slug-here';
   }

   return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...