Плагин Wordpress конфликтует с элементом библиотеки мультимедиа - PullRequest
1 голос
/ 21 марта 2012

Я создал новую страницу, которой присвоен собственный шаблон. Когда я захожу на URL этой страницы, я вижу то, что выглядит как макет страницы по умолчанию (не мой шаблон), и на панели инструментов администратора отображаются параметры, относящиеся к медиафайлам (например, Редактировать медиафайлы).

После некоторых царапин на голове я понял, что этот URL-адрес должен указывать на элемент мультимедиа. Я отредактировал слаг страницы и «бинго», фактическая страница выглядит так, как и ожидалось. Когда я захожу на исходный URL (с первого слага), я вижу тот же медиа-элемент.

Итог: Похоже, что страница и элемент мультимедиа по совпадению имеют одно и то же имя, и это каким-то образом вызывало пересечение проводов WP.

Мой вопрос: Может ли кто-нибудь помочь мне понять, как / почему это происходит? Создает ли WordPress магические постоянные ссылки на все в медиатеке ( кроме их расположение в wp-content/uploads/...)?

Примечание. Элемент мультимедиа был нормально загружен в библиотеку мультимедиа (не FTP в корневой каталог и т. Д.)

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Да, в WordPress нельзя использовать дубликаты / категории / таксономии / теги.Поэтому, если ваша тема позволяет медиа-файлам и постоянным ссылкам иметь свою собственную страницу, а слаг такой же, как и у другой, к ней обычно добавляется число, потому что базе данных это не нравится.

media slug"example"
page slug"example" не будет работать, так как этот слаг уже существует, если он сделан в админке, он автоматически изменит slug на "example-1".

0 голосов
/ 14 февраля 2018

Это поздний ответ, но я хотел дать более чистую версию ответа, который дал alesub.

function wp21418_append_to_post_name() {

    // Checks to see if the option images_updated has been set or has a value of true.
    if ( get_option( 'images_updated' ) === 'true' ) :
        return;
    endif;

    // get all attachment posts.
    $attachments = get_posts([
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'name' => $p->slug,
        'posts_per_page' => -1,
    ]);

    // For each attachment, loop and update the post_name
    foreach($attachments as $p){

        $attachment = array(
            'ID'           => $p->ID,
            'post_name' => $p->post_name.'-image'
        );
        // Update the post into the database
        wp_update_post( $attachment );

    }

    // Once everything is looped, add the option to the database.
    add_option( 'images_updated', 'true' );
}

add_action( 'after_setup_theme', 'wp21418_append_to_post_name' );

Эта функция запускается на хуке действия сразу после настройки темы.Первая строка проверяет, есть ли опция в базе данных images_updated.Если эта опция существует, мы обращаемся к функции, и она не выполняет никакой обработки.В противном случае, если опция не существует, она запускает функцию и устанавливает опцию в самом конце.

Это делает так, что она будет работать только один раз.Вам не нужно удалять функцию после обновления.Если вы хотите запустить его снова, вы можете просто удалить оператор if вверху. В качестве предостережения : выполнение этого добавит еще один -image в конце post_names, даже если у них уже есть -image (например, -image-image)

Может быть больше файловпроверка имени для этой ситуации.Обновит ответ, если кому-то это действительно нужно.

0 голосов
/ 02 ноября 2013

У меня просто была эта проблема, и я исправил ее так:

$post_s=get_posts('posts_per_page=-1');
        foreach($post_s as $p){
            $atts = get_posts('post_type=attachment&name='.$p->post_name.'&posts_per_page=-1&post_status=inherit');
            foreach($atts as $att){
                echo 'found!! '.$p->post_name;
                // Update post 37
                $my_post = array(
                      'ID'           => $atts->ID,
                      'post_name' => $att->post_name.'-image'
                );
                // Update the post into the database
                wp_update_post( $my_post );
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...