0

マルチサイト インストールのプライマリ サイトに切り替えて画像をロードする、Wordpress プラグイン内の関数を変更しようとしています。プラグインは定期的にメンテナンスされているため、簡単に更新できるようにコードを変更したくありません。

このように変更できるように、関数に「フック」する方法はありますか? 以下に達成しようとしていることを示しました。ここでは、手動でswitch_to_blog(1)と を追加する必要がありrestore_current_blog()ました。

function get_value($post_id, $field)
{
    $value = parent::get_value($post_id, $field);

    switch_to_blog(1);

    $attachments = get_posts(array(
        'post_type' => 'attachment',
        'post_status' => null,
        'post__in' => $value,
    ));

    $ordered_attachments = array();
    foreach( $attachments as $attachment)
    {
        $ordered_attachments[ $attachment->ID ] = array(
            'id' => $attachment->ID,
            'alt' => get_post_meta($attachment->ID, 
                        '_wp_attachment_image_alt', true),
            'title' => $attachment->post_title,
        );
    }

    restore_current_blog();

    return $ordered_attachments;
}
4

3 に答える 3

2

元の作成者に関数を分割するよう依頼します。

function get_ordered_attachments_by_field($post_id, $field)
{
    $value = parent::get_value($post_id, $field);

    return get_ordered_attachments($value);
}

function get_ordered_attachments($value)
{
    $attachments = get_posts(array(
        'post_type' => 'attachment',
        'post_status' => null,
        'post__in' => $value,
    ));

    $ordered_attachments = array();
    foreach ($attachments as $attachment)
    {
        $ordered_attachments[ $attachment->ID ] = array(
            'id' => $attachment->ID,
            'alt' => get_post_meta($attachment->ID, 
                        '_wp_attachment_image_alt', true),
            'title' => $attachment->post_title,
        );
    }

    return $ordered_attachments;
}

その後、必要な機能とより簡単にやり取りできます。

    $value = $object->get_value($post_id, $field)
    switch_to_blog(1);
    $attachments = $object->get_ordered_attachments($value);
    restore_current_blog();

そして、仕事は終わりました。プロジェクトの利点は、添付関数のコード行を (少なくとも少し) 削減し、その関数がその名前で何をするかをより具体的にしたことです。そのオブジェクトが何であるかわかりません。プラグインの場合、これは関数を格納する場所のように見えます。そのため、より多くの関数を作成しますが、小さい関数を作成します。

于 2012-12-18T15:30:58.393 に答える
2

いいえ、開発者が「do_action」行をコーディングしている場合にのみ、関数に「フック」できます。そうでない場合は、関数のコピーを作成し、元の代わりにコピーを呼び出すことができますが、関数がプラグイン内で呼び出された場合は、何もできず、プラグインを変更するだけです (あなたが言ったように、これはそうではありません良い考えです)

于 2012-12-18T15:22:02.813 に答える
1

に保存されているファイルに置換関数を入れることで、特定のプラグイン関数をオーバーライドできます。wp-contents/mu-plugins

元の関数がif()既に存在するかどうかをチェックするブロック内にあることを確認する必要があります。そうでない場合、この方法は機能しません。

于 2012-12-18T15:26:17.420 に答える